簡體   English   中英

如何存儲 Java 常量以用於構建鍵值組合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM