可能重复:
是否可以扩展Java枚举?
我遇到了一个小问题,我有一个具有一定数量值的枚举。此枚举用于系统的多个部分,在某些情况下需要包含更多的值。
由于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
这是一个丑陋的解决方案吗?-我的意思是,它是有效的,但似乎是错误的。。。
-----更新:-----
通用枚举位于系统的"核心"部分(可以有多个前端(,每个前端的附加枚举都不同。所以打个比方:假设VEHICLE枚举有ENGINE、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
}
}
我会使用类似的模式,但我不明白为什么你的嵌套中有这么多。我的应该是这样的:
interface SomeType {
String name();
}
public enum CoreEnum implements SomeType {
VALUE1,
VALUE2;
}
public enum AdditionalEnum implements SomeType {
VALUE3,
VALUE4;
}
您可能会为此目的阅读有关typesafe枚举模式的信息。你介绍界面还可以。因此,您应该只依赖于API中的那个接口。如果该接口的实现是由enum或类完成的,那么API用户应该不关心它。
我看不出有什么不好的地方。
您可以通过设计创建类似于enum的自己的类
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();
}