假设我有一个Enum定义如下:
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;
}
Run Code Online (Sandbox Code Playgroud)
我可以使用Sample.A或Sample.A.getAVal()不使用问题来提取值。
现在假设AClass.getValue()可以使用一个参数来返回可能不同的特定值,例如AClass.getValue(42)。
是否可以将参数传递给公共Enum方法并检索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)
}
Run Code Online (Sandbox Code Playgroud)
使用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);
}
Run Code Online (Sandbox Code Playgroud)
当然,如果您可以创建具有某种方法的其他基本类型的实例getValue(int x),则可以将代码放入枚举类本身而不是嵌套的类中。