为什么Java需要EnumClass.VALUE而不仅仅是VALUE?

Tre*_*ude 3 java enums

如果您有一个Java enum和一个枚举类型的变量,如下所示:

public enum Something
{
   VAL1,
   VAL2,
   VAL3
}

public Something varName;
Run Code Online (Sandbox Code Playgroud)

为什么有必要写varName = Something.VAL1;而不是简单varName = VAL1;?编译器不应该知道varName它只能采用null,VAL1VAL2,以及VAL3作为值的类型吗?

And*_*eas 5

=语句的右侧是一个表达式,通常会进行解析.无论如何,要说明编译器如何复杂,请考虑以下事项:

public enum Something { VAL1, VAL2, VAL3 }

Something VAL3 = Something.VAL1;

Something a = VAL3;
Run Code Online (Sandbox Code Playgroud)

应该a分配VAL1还是VAL3

您不需要枚举名称的唯一时间是在switch语句中,因为case语句必须使用有效的枚举值,因此枚举名称是不必要的.

switch (a) {
    case VAL1:
        // do something
        break;
    case VAL2:
        // do something
        break;
    case VAL3:
        // do something
        break;
}
Run Code Online (Sandbox Code Playgroud)