我希望能够定义一个Enum类,它将包含另一个Enum以及它自己的值。例如,:
public enum A {
A1, A2, A3;
}
public enum B{
B1, B2, ...(somehow define references to all values in enum A)
}
使枚举B中包含的任何值必须定义为initself(例如B1,B2)或任何枚举值A.
谢谢,
答案 0 :(得分:5)
这样B
是A
和B
的联合?如果没有B
扩展A
,那么这是不可能的,这在java中是not supported。继续进行的方法是创建enum
,其中包含A
和B
的组合值,例如
enum C {
A1, A2, A3, B1, B2;
}
答案 1 :(得分:2)
这样的东西?
enum A {
A1, A2;
}
enum B {
B1(null),
B2(null),
A1(A.A1),
A2(A.A2);
private final A aRef;
private final B(A aRef) {
this.aRef = aRef;
}
}
答案 2 :(得分:2)
通常,由于我们在java中工作,并且通常禁止使用OO设计,因此您可以通过扩展来获得此功能。但是,枚举会隐式扩展java.lang.Enum,因此不能扩展另一个类。
这意味着枚举的可扩展性大部分来自不同的来源。
Joshua Bloch在第34项中的 Effective Java:Second Edition 中对此进行了广告,当时他为枚举提供了一个共享界面模式。以下是他的模式示例:
public interface Operation {
double apply(double x, double y);
}
public enum BasicOperation implements Operation {
PLUS("+") {
public double apply(double x, double y) { return x + y; }
},
MINUS("-") {
public double apply(double x, double y) { return x - y; }
},
TIMES("*") {
public double apply(double x, double y) { return x * y; }
},
DIVIDE("/") {
public double apply(double x, double y) { return x / y; }
}
这就像你在枚举时可以达到共享状态一样接近。正如JohanSjöberg上面所说的,简单地将枚举结合到另一个枚举中可能是最简单的。
祝你好运!
答案 3 :(得分:1)
最接近的是让A和B实现一些共享接口。
enum A implements MyEnum{A1,A2}
enum B implements MyEnum{B1,B2}
MyEnum e = B.B1;
此解决方案不适用于switch语句,也不适用于优化的枚举集合。
java enum实现不支持您的用例,要么实现复杂(与其实用性相比),要么它没有出现(我所知道的几种语言都没有直接支持)。