我有一个小问题,我有一个具有一定数量值的枚举。此枚举用于系统的多个部分,在某些情况下需要包含更多值。
由于在Java中不允许扩展枚举,我试图想到一些替代方案,到目前为止我的解决方案是创建一个包含枚举的接口,该枚举具有系统所有部分的通用值,然后创建一个空类实现这个接口。
所以enum A implements I
所以我可以使用A.COMMON_ENUM.ENUM_VALUE
现在我可以在系统的某个子部分创建一个新的enum B
,其中包含一个枚举ADDITIONAL_ENUM
,它实现了I
。所以现在我可以用它:
B.COMMON_ENUM.ENUM_VALUE
或
B.ADDITIONAL_ENUM.ADDED_ENUM_VALUE
这是一个丑陋的解决方案吗? - 我的意思是,它有效,但似乎错误 ......
-----更新:-----
公共枚举位于系统的“核心”部分(可以有多个前端),每个前端的附加枚举也各不相同。所以使用类比:让我们说车辆枚举有引擎,DOORS然后在我的CAR前端我需要添加“WHEELS”并且在我的BOAT前端我需要添加“PROPELLER”
代码示例:
public interface EnumType { // I
public enum Core {
VALUE1,
VALUE2,
VALUE3
}
}
public enum CommonEnum implements EnumType { // A
}
public enum AdditionalEnumType implements EnumType { // B
public enum Additional {
VALUEX,
VALUEY
}
}
答案 0 :(得分:6)
我会使用类似的模式,但我不明白你为什么要把它们全部嵌入你的模式中。我的看起来像这样:
interface SomeType {
String name();
}
public enum CoreEnum implements SomeType {
VALUE1,
VALUE2;
}
public enum AdditionalEnum implements SomeType {
VALUE3,
VALUE4;
}
答案 1 :(得分:1)
您可能会为此目的阅读typesafe enum pattern。介绍界面你没问题。所以你应该只依赖于API中的那个接口。如果该接口的实现是由枚举或类完成的,则应该与API用户无关。
我看不出有什么坏事。
答案 2 :(得分:0)
您可以创建类似于enum by design的自己的类
public class A {
A() {}
public static final A A1 = new A();
public static final A A2 = new A();
@Override
public String toString() {
return getClass().getSimpleName();
}
}
public class B extends A {
B() {}
public static final A A3 = new A();
}