如何为这样的枚举建立接口
时间:2020-03-06 14:31:04 来源:igfitidea点击:
我有以下枚举:
public enum Status implements StringEnum{ ONLINE("on"),OFFLINE("off"); private String status = null; private Status(String status) { this.status = status; } public String toString() { return this.status; } public static Status find(String value) { for(Status status : Status.values()) { if(status.toString().equals(value)) { return status; } } throw new IllegalArgumentException("Unknown value: " + value ); } }
是否可以构建StringEnum接口以确保每个枚举都具有find(),toString()和构造函数?
谢谢。
解决方案
不能在接口中指定构造函数或者静态方法。要获得一个简洁明了的解释,请查看本文:接口中没有静态方法
- 不能在接口中定义静态方法
- 构造函数不能在接口中定义
- toString是在java.lang.Object中定义的,如果未定义方法,则在接口中要求它永远不会导致编译错误。
我们为什么仍然要强制执行构造函数?无论如何,我们不能在运行时创建新的enum实例(除非通过某种反射机制)。
枚举已经有一个valueOf()(find方法)方法。而且" toString()"是一个java.lang.Object方法,因此,每个类都具有该功能,换句话说,我们不能强行使用它!我看不到强制执行构造函数的价值,因为不同的枚举可能具有不同的初始化。
亲切的问候