为什么Java enum不能是最终的?

public interface Proposal { public static final enum STATUS { NEW , START , CONTINUE , SENTTOCLIENT }; } 

Java不允许枚举在接口内是final的,但默认情况下,接口内的每个数据成员都是public static final 。 任何人都可以澄清一下吗?

枚举不能是最终的,因为编译器将为程序员明确定义实现的每个枚举条目生成子类。

此外, JLS第8.9节中没有实例拥有自己的类主体的枚举是隐式最终的。

Java不允许您创建扩展enum类型的类。 因此,枚举本身总是最终的,因此使用final关键字是多余的。

当然,从某种意义上说, enum不是最终的,因为你可以为枚举描述符中的每个字段定义一个匿名子类。 但是使用final关键字来防止这些类型的描述没有多大意义,因为人们必须在同一个.java文件中创建这些子类,任何有权这样做的人都可以轻松删除final关键字。 在其他一些软件包中没有人扩展你的枚举的风险。

两件事情:

  1. 枚举是java.lang.Enum的最终子类
  2. 如果枚举是类的成员,则它是隐式静态的

宣布枚举最终没有意义。 类的最终意味着它们不能被inheritance。 但是,默认情况下不能inheritance枚举(即它们是最终的)。

最后一件事只对变量有效。 但是,您应该将枚举更像数据类型而不是变量。