Java枚举变量名称与枚举名称相同

adr*_*971 1 java enums

谁能解释为什么枚举变量名不能与枚举名相同?如果它是常规类,它将起作用,但由于某种原因,enum无效。例子不起作用-> someEnumType someEnumType = someEnumType.TYPE1;

And*_*ner 5

参见JLS Sec 6.3(添加了重点)(*):

块中的局部变量声明的范围(第14.4节)是该声明在其中出现的其余部分,从其自己的初始化程序开始,并在该局部变量声明语句的右侧包括其他任何声明符。

someEnumType someEnumType = someEnumType.TYPE1;
Run Code Online (Sandbox Code Playgroud)

Java认为someEnumType右侧的是指尚未明确分配的变量。


(*)此规则的有趣结果之一是这是合法的:

String s = s = "hello!";
Run Code Online (Sandbox Code Playgroud)

(对于那些您确实非常想分配变量的情况)。