我希望能够定义一个Enum类,它将包含另一个Enum以及它自己的值。例如,:Java Enum引用另一个枚举
public enum A {
A1, A2, A3;
}
public enum B{
B1, B2, ...(somehow define references to all values in enum A)
}
使得包含在枚举乙任何值必须为定义initself(如B1,B2),或枚举A的任何值
谢谢,
我希望能够定义一个Enum类,它将包含另一个Enum以及它自己的值。例如,:Java Enum引用另一个枚举
public enum A {
A1, A2, A3;
}
public enum B{
B1, B2, ...(somehow define references to all values in enum A)
}
使得包含在枚举乙任何值必须为定义initself(如B1,B2),或枚举A的任何值
谢谢,
使得B
是A
和B
的联合?没有B
延伸A
,这是不可能的,这是在java中的not supported。进行的方式是创建一个enum
其中包含的A
和B
,例如组合的值,
enum C {
A1, A2, A3, B1, B2;
}
(这就是'A'扩展'B'。) –
这样的?
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;
}
}
谢谢你的回答。看起来似乎没有简单的方法去做我脑海中的事情。我选择使用计划Java类来模拟此类功能。 – MikeMY
最接近你可以得到的是让A和B实现一些共享接口。
enum A implements MyEnum{A1,A2}
enum B implements MyEnum{B1,B2}
MyEnum e = B.B1;
此解决方案不会与switch语句和优化的枚举集合一起工作。
java的enum实现不支持你的用例,它要么实现起来比较复杂(相对于它的实用性),要么它没有出现(我知道的几种语言都不是直接支持这种语言的) 。
通常,由于我们在java中工作,并且通常禁止OO设计,所以您可以通过扩展来获得此功能。但是,枚举会隐式扩展java.lang.Enum,因此不能扩展另一个类。
这意味着枚举的可扩展性大部分来自不同的来源。
Joshua Bloch在有效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; }
}
这是关于尽可能接近共享状态,当涉及到枚举。正如JohanSjöberg在上面所说的,将枚举简单地组合成另一个枚举可能是最简单的。
祝你好运!
为什么你需要扩展一个枚举? – Woot4Moo