假设我有一个枚举定义如下:
public enum Sample{ // suppose AClass.getValue() returns an int A(AClass.getValue()),B(AClass.getValue()),C(AClass.getValue()); private int _value; private Sample(int _val){ this._value = _val; } public int getVal(){ return _value; }
我可以使用Sample.A或Sample.A.getAVal()提取值而不会出现问题.
现在假设AClass.getValue()可以使用参数来返回可能不同的特定值,例如AClass.getValue(42).
可以将参数传递给公共Enum方法并检索枚举值吗?换句话说,我可以像Enum一样定义
public enum Sample{ // suppose AClass.getValue() returns an int A(AClass.getAValue()),B(AClass.getBValue()),C(AClass.getCValue()); private int _value; private Sample(int _val){ this._value = _val; } public int getVal(){ return _value; } public int getVal(int a){ // somehow pull out AClass.getAValue(a) }
使用Sample.A.getValue(42)?
解决方法
你可以这样做,但只能在枚举中创建一个抽象方法,并在每个值中覆盖它:
public enum Sample { A(AClass.getAValue()) { @Override public int getVal(int x) { return AClass.getAValue(x); } },B(BClass.getAValue()) { @Override public int getVal(int x) { return BClass.getBValue(x); } },C(CClass.getAValue()) { @Override public int getVal(int x) { return CClass.getCValue(x); } }; private int _value; private Sample(int _val){ this._value = _val; } public int getVal(){ return _value; } public abstract int getVal(int x); }
当然,如果您可以创建一个具有getValue(int x)方法的其他基类型的实例,那么您可以将代码放入枚举类本身而不是嵌套类.