最近,我发现了以下结构的代码:
界面:
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/