我希望通过将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

10-07 23:28