Java抱怨在开关的默认情况下未初始化最终字段
我想用不同的方式初始化最后一个字段。因此,我创建了一个枚举类型并对其进行了切换Java抱怨在开关的默认情况下未初始化最终字段,java,Java,我想用不同的方式初始化最后一个字段。因此,我创建了一个枚举类型并对其进行了切换 public enum TYPE { A, B, } 我还向开关添加了一个默认情况,并使用一个断言警告我的程序员同事,以防他们添加新的枚举常量和 忘记更新开关 default: assert false : "missing TYPE detected"; 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
}
}
当您重新分配foo引用时
foo = 11;
您不能将其声明为最终版本
private final int foo;
重新分配foo参考时,请参见
foo = 11;
您不能将其声明为最终版本
private final int foo;
请参见您可以在
默认值之后将代码更改为如下内容:
assert (foo = 0) > 0 : "missing TYPE detected";
您可以在默认值之后将代码更改为如下内容:
assert (foo = 0) > 0 : "missing TYPE detected";
而不是断言false:“检测到缺少类型”
您可以抛出一个IllegalArgumentException(“检测到缺失类型”)
而不是断言false:“检测到缺失类型”
如果在switch语句中使用final
关键字,您可能会抛出一个IllegalArgumentException(“检测到缺失类型”)
。要解决这个问题,只需将foo
设置为一个您知道的值,即发生了错误,例如-1
,如果使用final
关键字,则在switch语句的所有情况下,您都必须设置它的值。为了避开这个问题,只需将您的foo
设置为一个您知道意味着发生错误的值,例如-1
,然后只需在default
中初始化它,然后只需在default
中初始化它。您可以在构造函数中为final
变量赋值,您不必在声明:Ok:)我学到了一些东西。您可以在构造函数中为final
变量赋值,您不必在声明时初始化final变量:Ok:)我学到了一些东西。