1

次のコードが与えられます...

private enum EventTypes {
    WORK, BREAK, WAIT, CLOSE, COMPLETE
}

public static void main(String[] args) {
    System.out.println("BREAK : " + EventTypes.BREAK);
    System.out.println(Arrays.asList(EventTypes.values()).contains("WORK"));
    System.out.println(Arrays.asList(EventTypes.values()).contains("WOR"));

}

これにより、出力が生成されます...

BREAK : BREAK
false
false

ここで、出力から「BREAK」が文字列として存在することがわかります。それでは、なぜ「WORK」が上記の列挙型に存在しないと信じているのでしょうか。

4

4 に答える 4

3

列挙値は文字列ではありません。これを行う :

Arrays.asList(EventTypes.values()).contains(EventTypes.WORK));

文字列が列挙値の名前であるかどうかを知りたい場合は、次のようにします。

boolean exist = false;
try {
    EventTypes.valueOf("WORK");
    exist = true; 
} catch (IllegalArgumentException e) {}
于 2012-10-11T10:18:42.837 に答える
2

引用符を削除できますが、削除できない場合は文字列を解析できます。

Arrays.asList(EventTypes.values()).contains(EventTypes.valueOf("WORK"))

壊れやすいが単純なアプローチは、文字列を比較することです

Arrays.toString(EventTypes.values()).contains("WORK")

後者は単体テストには問題ないかもしれませんが、製品コードには適していません。

于 2012-10-11T10:22:06.813 に答える
1

のカスタム実装を追加できますcontains

private enum EventTypes {
    WORK, BREAK, WAIT, CLOSE, COMPLETE;

    public static boolean contains(String str) {
        for (EventTypes enumtype : values()) {
            if (enumtype.name().contains(str))
                return true;
        }
        return false;
    }
}

その後、以下のように使用できます。

    System.out.println(EventTypes.contains("WORK"));
    System.out.println(EventTypes.contains("WOR"));

列挙型は定数であり、これを行うことで何を達成できるかわかりません。列挙型の列挙型について詳しく読むことができます

正しい使い方は

EventTypes enumType =EventTypes.valueOf("WORK");
于 2012-10-11T10:28:35.050 に答える
0

この方法で試してみてください.....

enum EventTypes {
    WORK, BREAK, WAIT, CLOSE, COMPLETE
};





public class T {

    public static void main(String[] args) {



        for(EventTypes e : EventTypes.values()){


            if(e.name().equals("WORK")){

                System.out.println("True");
            }else{

                System.out.println("False");
            }
        }
    }
}
于 2012-10-11T10:25:48.387 に答える