我希望通过将XResult的值复制到XStatus中来“扩展”枚举XStatus中的XResult。
这就是我的做法。如果在XResult中未找到item,则描述为空:
private final String description;
private final Whatever funStuff;
private XStatus(){
String d=null;
Whatever f=null;
try{
XResult xResult = XResult.valueOf(this.name());
d = XResult.toString();
f = XResult.getWhatever();
}
catch (Exception e){
}
this.description = d;
this.funStuff = f;
}
问题是,如果XResult不包含此类项目,它将抛出IllegalArgumentException。
题:
这是将一个枚举值复制到另一个枚举的最佳方法吗?问题的原因是,我为尝试使用枚举来定义枚举感到非常困扰。
如果确实是唯一的方法,那么尝试捕获值得付出的代价是否值得?
除了不可靠的手动复制(不跟踪XResult的更改)之外,我还有什么选择?
其余代码:
出于好奇,这是与问题无关紧要的其余代码:
private XStatus(final String d){
this.description = d;
}
public String toString(){
if (description==null || description.length()==0)
return doSomethingTo( this.name() );
return description;
}
public getWhatever(){ /*similar to toString */ }
最佳答案
嗯,枚举原则上只是Java对象,因此您可以使用反射来测试XResult是否包含所需的值,甚至对您的枚举类包含add new values at runtime。