我希望能夠定義一個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