Java抱怨在开关的默认情况下未初始化最终字段
我想用不同的方式初始化最后一个字段。因此,我创建了一个枚举类型,并对其进行了切换
public enum TYPE {
A,
B,
}
我还向开关添加了一个默认情况,并用一个断言警告我的程序员同事,以防他们添加新的枚举常量和 忘记更新开关了
default:
assert false : "missing TYPE detected";
java却检测到了我的论点中的缺陷,并抱怨空白字段可能没有初始化。我该如何处理这种情况
public class SwitchExample
{
public enum TYPE {
A,
B,
}
private final int foo;
public SwitchExample(TYPE t)
{
switch (t) {
case A:
foo = 11;
break;
case B:
foo = 22;
break;
default:
assert false : "missing TYPE detected";
}
// The blank final field foo may not have been initialized
}
}
# 1 楼答案
您可以将
default
之后的代码更改为以下内容:# 2 楼答案
当你重新分配foo参考
你不能宣布它是最终的
见http://javarevisited.blogspot.fr/2011/12/final-variable-method-class-java.html