[英]How to store Java constants for use in building key value combinations
假設我想將這些鍵的潛在鍵和潛在值存儲為常量。 我怎樣才能做到這一點? 還是我應該完全避免它?
這是我自己想到的方法,但正如你所看到的,它有一個明顯的失敗。
public static class Foo {
public static final String KEY = "foo" ;
public static class Values {
public static final String BAR = "bar" ;
public static final String HEY = "hey" ;
}
}
public static class Another {
public static final String KEY = "another" ;
public static class Values {
public static final String ONE = "1" ;
public static final String TWO = "two" ;
public static final String THREE = "THREE" ;
}
}
這使我可以像這樣訪問這些密鑰
miscellaneousMethod( Foo.KEY, Foo.Values.BAR )
miscellaneousMethod( Another.KEY, Another.Values.TWO )
但是,我並不完全想為每個鍵/可能值對編寫一個單獨的 static 內部 class 。
有沒有更好的方法將鍵值對存儲為常量?
我想將它們存儲為常量,以便以后與生成的哈希圖進行比較。 這樣我就可以問這樣的東西:
if( map.get( Foo.KEY ).equals( Foo.Values.HEY ) ) { /* do stuff */ }
如果它們都是常量,則可以使用 Enum:
public enum ValueEnum {
FOO("foo", "bar", "hey"),
ANOTHER("another", "1", "two", "THREE"),
;
private final String key;
private final Set<String> values;
private ValueEnum(String key, String... values) {
this.key = key;
this.values = Collections.unmodifiableSet(new HashSet<String>(Arrays.asList(values)));
}
public final boolean isInMap(Map<String,String> map) {
if(map.containsKey(key)) {
return values.contains(map.get(key));
}
else {
return false;
}
}
}
然后
if( ValueEnum.FOO.isInMap(map) ) { /* do stuff */ }
請避免使用這樣的常量。 對於常量,使用 Java 枚舉類型。 它在后台編譯為類,因此您可以獲得類型安全,並且您還可以在 switch 語句中使用它們。 也很高興能夠向它們添加方法。
這里有一個很好的例子: http://download.oracle.com/javase/tutorial/java/javaOO/enum.html
更長的討論(有很多例子)在這里: http://download.oracle.com/javase/1.5.0/docs/guide/language/enums.ZFC35FDC70D5FC69D269883A822C75A
如果可能的話,您能否僅在 XML 文件中指定這些鍵並使用 Java XML 綁定(JAXB)來加載它們。
將常量放入Map
中,然后使用Collections.unmodifiableMap()
方法使其不可修改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.