【发布时间】:2010-11-08 00:43:38
【问题描述】:
我想从它的字符串值(或任何其他值)中查找一个枚举。我已经尝试了以下代码,但它不允许在初始化程序中使用静态。有没有简单的方法?
public enum Verbosity {
BRIEF, NORMAL, FULL;
private static Map<String, Verbosity> stringMap = new HashMap<String, Verbosity>();
private Verbosity() {
stringMap.put(this.toString(), this);
}
public static Verbosity getVerbosity(String key) {
return stringMap.get(key);
}
};
【问题讨论】:
-
IIRC,这给出了 NPE,因为静态初始化是自上而下完成的(即顶部的枚举常量是在它下降到
stringMap初始化之前构造的)。通常的解决方案是使用嵌套类。 -
感谢大家如此迅速的反应。 (FWIW 我没有发现 Sun Javadocs 对这个问题很有用)。
-
这确实是语言问题而不是库问题。但是,我认为 API 文档的阅读量比 JLS 多(尽管可能不是由语言设计者阅读),所以这样的内容在 java.lang 文档中应该更突出。