如何为这样的枚举建立接口

时间: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方法,因此,每个类都具有该功能,换句话说,我们不能强行使用它!我看不到强制执行构造函数的价值,因为不同的枚举可能具有不同的初始化。

亲切的问候