[英]Java String array comparing with enum
給定以下代碼...
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”?
枚舉值不是字符串。 做這個 :
Arrays.asList(EventTypes.values()).contains(EventTypes.WORK));
如果您想知道您的字符串是否為枚舉值的名稱,請執行
boolean exist = false;
try {
EventTypes.valueOf("WORK");
exist = true;
} catch (IllegalArgumentException e) {}
您可以刪除引號,但如果不能,則可以解析字符串。
Arrays.asList(EventTypes.values()).contains(EventTypes.valueOf("WORK"))
一種脆弱但簡單的方法是比較字符串
Arrays.toString(EventTypes.values()).contains("WORK")
后者對於單元測試可能是好的,但不適用於生產代碼。
您可以添加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");
這樣嘗試.....
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");
}
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.