加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 19:33:08 所属栏目:Java 来源:网络整理
导读:假设我有一个枚举定义如下: 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 getVa
假设我有一个枚举定义如下:
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)方法的其他基类型的实例,那么您可以将代码放入枚举类本身而不是嵌套类.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读