public interface Proposal {
public static final enum STATUS {
NEW ,
START ,
CONTINUE ,
SENTTOCLIENT
};
}
Java不允许枚举在接口内final
,但默认情况下,接口内的每个数据成员都是public static final
。任何人都可以澄清这个吗?
答案 0 :(得分:32)
Java不允许您创建扩展enum
类型的类。因此,枚举本身始终是最终的,因此使用final
关键字是多余的。
当然,从某种意义上说,enum
不是最终的,因为你可以为枚举描述符中的每个字段定义一个匿名子类。但是使用final
关键字来防止这些类型的描述是没有意义的,因为人们必须在同一个.java文件中创建这些子类,任何有权这样做的人都可以轻松删除final
关键字。没有人在其他包装中扩展你的枚举的风险。
答案 1 :(得分:26)
枚举不能是最终的,因为编译器将为程序员明确定义实现的每个枚举条目生成子类。
此外,没有实例拥有自己的类主体的枚举是隐式最终的JLS section 8.9。
答案 2 :(得分:7)
两件事:
答案 3 :(得分:2)
宣布枚举最终没有意义。类的最终意味着它们不能被继承。但是,默认情况下不能继承枚举(即它们是最终的)。
最后一件事仅对变量有效。但是,您应该将枚举更像数据类型而不是变量。