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:)我学到了一些东西。