2011-12-13 16 views
3

このようにAndroidでEnumを使用することはできますか?私はEventAction.SDCARD_MOUNTED.toString(へのアクセスを有する外部コードからJavaのenumは返すメソッドを追加できますか?

public enum EventAction 
{ 
    SDCARD_MOUNTED 
    { 
    public String toString() { 
     return "External SDCard was mounted"; 
    } 

    public int getCode() { 
     return 25; 
    } 
    } 
} 

)が、.getCode()が表示されません。私が見た例では、getCode()がコードの中からどのように使用されるかを示しています。

答えて

8

abstract方法としてgetCode()を宣言します。

public enum EventAction 
{ 
    SDCARD_MOUNTED 
    { 
    @Override 
    public String toString() { 
     return "External SDCard was mounted"; 
    } 
    @Override 
    public int getCode() { 
     return 25; 
    } 
    }; 

    public abstract int getCode(); 

} 

すべての値が同じように実装されようとしている場合は、これを行うには明確です:

public enum EventAction { 
    SDCARD_MOUNTED(25, "External SDCard was mounted"); 
    private final int code; 
    private final String message; 
    private EventAction(int code, String message) { 
    this.code = code; 
    this.message = message; 
    } 
    @Override 
    public String toString() { return message; } 
    public int getCode() { return code; } 
} 
+0

グレート、きれいな例。私はあなたのように多くの価値観に共通の方法で実装しました。 – Maxim

5

あなたがでメソッドを宣言する必要があります列挙型レベル:

public enum EventAction 
{ 
    SDCARD_MOUNTED 
    { 
    public String toString() { 
     return "External SDCard was mounted"; 
    } 

    public int getCode() { 
     return 25; 
    } 
    }; 

    public abstract int getCode(); 

} 
3
public enum EventAction 
{ 
    SDCARD_MOUNTED("External SDCard was mounted",25), 
    SDCARD_MOUNTED_1("External SDCard was mounted 111111111",50); 

    private String details; 
    private int code; 

    private EventAction(String details,int code){ 
     this.code = code; 
     this.details = details; 
    } 

    public String toString() { 
     return this.details; 
    } 

    public int getCode() { 
     return this.code; 
    } 
} 
メイン

System.out.println(EventAction.SDCARD_MOUNTED.toString()); 
System.out.println(EventAction.SDCARD_MOUNTED.getCode()); 

OUTPUTで

External SDCard was mounted 
25 
External SDCard was mounted 111111111 
50 
+0

これは、他の列挙値に対して異なるプロパティを許可しません。 – erickson

+0

これは私が言ったことは動作しません。 – Maxim

+0

@マキシム実際は少し違っています。セミコロン( ';')の位置に注意してください。これらのメソッドは、あなたの質問のように 'SDCARD_MOUNTED'という値ではなく、* every *' EventAction'のメンバーになります。 – erickson

関連する問題