1
我希望能夠以編程方式爲每個密鑰指定密鑰列表和允許的值,以便可以在編譯時檢查代碼中的錯誤並希望獲得更好的性能。我可以在枚舉中聲明枚舉以指定/限制Java中的映射中的鍵和值嗎?
想象我代表字在數據庫中,每個字有許多特點:
public class Word {
public Map<Feature, FeatureValue> features = new EnumMap<Feature, FeatureValue>();
}
而且我有一個枚舉類:
public enum Feature {
TYPE("Type") {
enum Value {
NOUN("Noun"),
VERB("Verb");
}
@Override
public Value[] getValues() {
return new Value[]{Value.NOUN, Value.VERB};
}
},
PLURALITY("Plurality") {
enum Value {
SING("Singular"),
PL("Plural");
}
@Override
public Value[] getValues() {
return new Value[]{Value.SING, Value.PL};
}
},
}
我至少希望能夠做類似的事情:
word.features.put(TYPE,TYPE.VALUE.NOUN); word.features.put(PLURALITY,PLURALITY.Value.PL);
因此,很容易看出這些值與鍵匹配,但枚舉語法中的枚舉似乎不被允許。
我也試過這樣:
TYPE("Type") {
public String NOUN = "Noun";
public String VERB = "Verb";
但由於它們不能是靜態出於某種原因我無法引用TYPE.NOUN。
請有人知道一個很好的模式來指定這樣的東西?我只是擔心,如果在我的代碼一樣
word.features.put(TYPE, "Noun");
使用字符串我找麻煩用錯別字等
Thanks Toader!我會試試這個。我不太明白,Feature類在哪裏?我不能只用: 'E擴展枚舉,屬性> void put(屬性功能,E值){' –
2011-05-30 10:10:44
這是我最初的想法:)。如果你想使它更簡單,你應該一路走下去:'E擴展枚舉> void put(屬性特徵,E值)' –
2011-05-30 15:17:59