java - 编写 Java Enum 的正确和错误方法

标签 java enums

最近,我发现了以下结构的代码:

界面:

public interface Base<T> {

    public T fromValue(String v);

}

枚举实现:

public enum AddressType implements Base<AddressType> {

    NotSpecified("Not Specified."),

    Physical("Physical"),

    Postal("Postal");

    private final String label; 

    private AddressType(String label) { 
        this.label = label; 
    } 

    public String getLabel() { 
        return this.label; 
    }

    @Override
    public AddressType fromValue(String v) {
        return valueOf(v);
    }
}

我的第一 react 是,无法通过反序列化或反射创建枚举实例,因此 fromValue() 应该是静态的。

我并不是想发起辩论,但这正确吗?我读过,Why would an Enum implement an interface ,我完全同意所提供的答案,但上面的例子是无效的。

我这样做是因为“架构师”不想接受我的答案,所以这是为了创建一个强有力的论据(用事实)为什么上述方法是好/坏。

最佳答案

您的Base接口(interface)未声明valueOf,并且fromValue方法确实已实现。我认为这段代码没有理由不能编译。如果您指的是 fromValue 内部的 valueOf 调用,那么这是对为每个枚举定义的静态方法的调用。不过,我不得不同意,它的设计是相当误导的,因为您需要枚举的任意成员才能调用 fromValue 并获取真正的成员。

另一方面,在我现在正在做的一个项目中,我有几个实现通用接口(interface)的枚举。这是因为枚举是相关的,我希望能够就它们的共同语义来统一对待它们。

关于java - 编写 Java Enum 的正确和错误方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11756612/

相关文章:

java - @ManyToMany 没有连接表(遗留数据库)

java - Java 枚举本身是否扩展了我可以使用的接口(interface)?

c - 这可能使用 typedef 枚举的成员吗?

python - 枚举和命名元组有什么区别?

Java ~ 通过套接字连接发送枚举

java - Hadoop MapReduce 新手,在 mapred.Reducer.<init>() 上获取 NoSuchMethodException

java - 序列化日期 : Swagger and Spring-MVC

java - 从 JNI 将 LocationManager.addGpsStatusListener 与 Android 一起使用不会导致任何事情发生

java - 单元测试 WorkManager 时周期性工作未达到运行状态

java - 仅在 for 循环中打印所有其他枚举值