为什么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
关键字。 在其他一些软件包中没有人扩展你的枚举的风险。
两件事情:
- 枚举是java.lang.Enum的最终子类
- 如果枚举是类的成员,则它是隐式静态的
宣布枚举最终没有意义。 类的最终意味着它们不能被inheritance。 但是,默认情况下不能inheritance枚举(即它们是最终的)。
最后一件事只对变量有效。 但是,您应该将枚举更像数据类型而不是变量。