我定义在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