是否可以将参数传递给Enum值?

jos*_*urs 7 java enums

假设我有一个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.ASample.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)

Jon*_*eet 6

您可以做到这一点,但是只能通过在枚举中创建一个抽象方法,并在每个值中覆盖它:

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),则可以将代码放入枚举类本身而不是嵌套的类中。