【问题标题】:How to build interface for such enum如何为此类枚举构建接口
【发布时间】:2008-09-21 23:23:30
【问题描述】:

我有以下枚举:

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() 和构造函数?

谢谢。

【问题讨论】:

    标签: java interface enums


    【解决方案1】:

    不可能在接口中指定构造函数或静态方法。要获得简洁明了的解释,请查看这篇文章:No static methods in interfaces

    【讨论】:

      【解决方案2】:

      枚举已经有一个valueOf()(你的查找方法)方法。而“toString()”是一个 java.lang.Object 方法,所以,每个类都会有它,换句话说,你不能强迫它!我看不到强制构造函数的价值,因为不同的枚举可能有不同的初始化。

      亲切的问候

      【讨论】:

        【解决方案3】:
        1. 静态方法不能在接口中定义
        2. 构造函数不能在接口中定义
        3. toString 定义在java.lang.Object 中,如果没有定义方法,在接口中要求它永远不会导致编译错误。

        为什么还要强制执行构造函数?无论如何,您都不能在运行时创建 enums 的新实例(除非可能通过某种反射机制)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-05-06
          • 2015-08-07
          • 1970-01-01
          • 2011-09-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多