4

Objective-C に次の列挙型があります。

typedef enum {
    APIErrorOne = 1,
    APIErrorTwo,
    APIErrorThree,
    APIErrorFour
} APIErrorCode;

インデックスを使用して、xml から列挙型を参照します。たとえば、にマップさxmlれるerror = 2APIErrorTwo

私のフローは、xml から整数を取得し、次のように switch ステートメントを実行することです。

int errorCode = 3

switch(errorCode){
    case APIErrorOne:
        //
        break;
    [...]
}

Java は、switch ステートメントでこの種の列挙型を嫌うようです。

ここに画像の説明を入力

enumJava では、メンバーにインデックスを割り当てることができないようです。上記に相当するJavaを取得するにはどうすればよいですか?

4

2 に答える 2

6

Java 列挙型には組み込みの序数があり、最初の列挙型メンバーは 0、2 番目の列挙型メンバーは 1 などです。

ただし、enum は Java のクラスであるため、フィールドを割り当てることもできます。

enum APIErrorCode {
    APIErrorOne(1),
    APIErrorTwo(27),
    APIErrorThree(42),
    APIErrorFour(54);

    private int code;

    private APIErrorCode(int code) {
        this.code = code;
    }

    public int getCode() {
        return this.code;
    }
} 
于 2012-07-11T17:57:11.480 に答える
3

ここでは、投稿ごとに 1 つの質問が原則です。

しかし、JBナイザーの答えを進化させます。

public enum APIErrorCode {

    APIErrorOne(1),
    APIErrorTwo(27),
    APIErrorThree(42),
    APIErrorFour(54);

    private final int code;

    private APIErrorCode(int code) {
        this.code = code;
    }

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

    public static APIErrorCode getAPIErrorCodeByCode(int error) {
       if(Util.errorMap.containsKey(error)) {
         return  Util.errorMap.get(error);
       }
       //Or create some default code
       throw new IllegalStateException("Error code not found, code:" + error);
    }

    //We need a inner class because enum are  initialized even before static block
    private static class Util {

        private static final Map<Integer,APIErrorCode> errorMap = new HashMap<Integer,APIErrorCode>();

        static {

            for(APIErrorCode code : APIErrorCode.values()){
                errorMap.put(code.getCode(), code);
            }
        }

    }
}

次に、コードで次のように記述できます

int errorCode = 3

switch(APIErrorCode.getAPIErrorCodeByCode(errorCode){
    case APIErrorOne:
        //
        break;
    [...]
}
于 2012-07-11T18:31:53.693 に答える