我希望能够定义一个枚举类,其中包括另一个枚举以及它自己的值。例如:
public enum A {
A1, A2, A3;
}
public enum B{
B1, B2, ...(somehow define references to all values in enum A)
}
任何包含在枚举B中的值必须是自身定义的(如B1,B2)或枚举A中的任何值。
谢谢。
这是指B
是A
和B
的并集吗?在Java中,这是不可能的,除非B
扩展了A
,但这是不被支持的,详情请参阅此处。正确的做法是创建一个enum
,其中包含A
和B
的组合值,例如,
enum C {
A1, A2, A3, B1, B2;
}
A
继承B
的过程。) - Tom Hawtin - tacklineenum 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;
}
}
通常,由于我们在使用java,通常采用面向对象的设计,您可以通过扩展获得此功能。但是,枚举隐式地扩展java.lang.Enum,因此不能扩展另一个类。
这意味着枚举的可扩展性必须来自其他来源。
约书亚·布洛赫在Effective Java: 第二版中的第34项中介绍了一种用于枚举的共享接口模式。以下是他模式的示例:
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; }
}
当涉及枚举时,这是您可以接近共享状态的方式。正如Johan Sjöberg上面所说的那样,最简单的方法可能是将枚举组合成另一个枚举。
祝好运!
你能做到的最接近的方式是让 A 和 B 实现一些共享接口。
enum A implements MyEnum{A1,A2}
enum B implements MyEnum{B1,B2}
MyEnum e = B.B1;
这个解决方案不能与switch语句或优化的枚举集合一起使用。
你的用例不被Java枚举实现所支持,因为它要么太复杂而不值得实现(与其有用性相比),要么没有涉及到(我所知道的很少语言都不直接支持这个)。