我定義在Groovy以下枚舉,但對這個問題的目的,可能是Java代碼:唯一枚舉名令牌
enum FestivalType {
BIG_MUSIC,
SMALL_MUSIC,
FILM,
FOOD_AND_DRINK;
private static Set<String> allSearchTokens = new HashSet<String>();
FestivalType() {
String searchToken = this.name().tokenize('_').first().toLowerCase();
if (searchToken in allSearchTokens) {
throw new RuntimeException("Duplicate search token");
} else {
this.searchToken = searchToken;
allSearchTokens.add(searchToken);
}
}
final String searchToken;
}
我試圖在做構造函數確定每個枚舉常量名稱中的第一個標記是否唯一,其中_
用作標記分隔符。
但是,此代碼不起作用,因爲allSearchTokens
未初始化直到所有常數初始化,所以我得到了NullPointerException
這裏
allSearchTokens.add(searchToken)
不錯!我將在未來使用該機制而不是我的機制。 – 2012-02-03 12:27:12
非常聰明,非常感謝。順便說一句,'tokenize()'是Groovy添加到String類的一種方法 – 2012-02-03 12:31:07
我想我記得在有效Java的第2版中使用這種技術進行單例構建 - 必讀 – 2012-02-03 12:42:09