我需要类似下面的东西
enum EE {
A("anything"),
B("beta"),
...
Z("zulu"),
ALL,
;
EE(String s) {
this.s = s;
}
EE() {
String s = "";
for (EE ee : values()) { // PROBLEM HERE
if (ee != ALL) s += " " + ee.s;
}
this.s = s;
}
}
创作时ALL
我想访问枚举的其他成员。上面的方法不起作用,因为values()
返回null
在此刻。使用A
, B
, ..., Z
明确不编译。我完全理解为什么会出现先有鸡还是先有蛋的问题,但我正在寻找一个很好的解决方法。
不,删除ALL
from EE
不是一个选择。
这对你有用吗? :
enum EE {
A("anything"),
B("beta"),
...
Z("zulu"),
ALL,
;
String s = null;
EE(String s) {
this.s = s;
}
EE() {
}
private void initS() {
String s = "";
for (EE ee : values()) {
if (ee != ALL) s += " " + ee.s;
}
this.s = s;
}
public String getS() {
if ( this.s == null ) { // assume we are ALL and initialize
initS();
}
return this.s;
}
}
静态初始化程序可能更干净。
public enum EE {
A("anything"),
B("beta"),
Z("zulu"),
ALL
;
static {
String s = "";
for (EE ee : values()) {
if ( ee != ALL ) s += ee + " ";
}
ALL.s = s.trim();
}
String s = null;
EE(String s) {
this.s = s;
}
EE() {
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)