【发布时间】:2011-09-23 03:36:14
【问题描述】:
现在是凌晨 5 点,我有点睡着了,所以可能是这样(我对 Java 也比较陌生)。但我不明白为什么这段代码会用这段代码生成 Null Exception。到时候地图应该已经初始化了吧?
private static final Map<String, Integer> CONDS_MAP =
Collections.unmodifiableMap
(
new HashMap<String, Integer>()
{{
put("null", 0);
put("false", 0);
put("true", 1);
put("numElems.lt", 2);
put("NELT", 2);
put("numElems.gt", 3);
put("NEGT", 3);
}}
);
private int getCodeInt(Object code)
{
if (code.getClass() == String.class)
{
return CONDS_MAP.get((String)code); // Null Exception here
}
else
// (... etc etc)
}
谢谢!对不起,它太微不足道了......
【问题讨论】:
-
无关,但尽量避免使用双括号 HashMap 初始化器,
code.getClass() == String.class应该是code instanceof String(更容易阅读,输入更快,避免可能的 NPE)。 -
@Thilo - 实例初始化程序有什么问题?
-
@Ted:它创建了 HashMap 的(不必要的)子类。
-
@Thilo:谢谢你的推荐!
标签: java exception static initialization