简化Java中Enum类的方法

Wei*_*Shi 6 java enums

我有一个包含Enum的类来进行计算.每个枚举使用外部类中的部分或全部非静态变量.但是因为它们无法访问实例变量,所以我必须将它们作为参数传递.

public class Outer{
    ClassA a;
    ClassB b;
    ClassC c;
    Map<MyEnum,Double> results= new EnumMap(MyEnum.class);
    private enum MyEnum{
        X{  public double calc(ClassA _a){ dostuff }           },
        Y{  public double calc(ClassB _b,ClassC _c){ dostuff } },
        Z{  public double calc(ClassA _a,ClassB _b){ dostuff } };
    }

    public void doCalc(){
        for(MyEnum item:MyEnum.values()){
            result.get(item) = item.calc(...);//Not uniform here
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我无法通过统一的方式传递for循环中的参数.我可以使每个Enum方法都采用所有类

public double calc(ClassA _a,ClassB _b,ClassC _c){ dostuff}
Run Code Online (Sandbox Code Playgroud)

但如果我有更多的类,参数看起来会太难看.有没有更好的方法来做这种事情?

San*_*rma 10

为什么不将outer的实例传递给calc()方法.在这种情况下,每个特定的枚举将具有相应处理Outer对象的逻辑,并且新的枚举不需要任何改变.

class Outer {

    ClassA a;
    ClassB b;
    ClassC c;
    Map<MyEnum,Double> results= new EnumMap<MyEnum, Double>(MyEnum.class);
    private enum MyEnum{
        X{  public void calc(Outer o){ }           },
        Y{  public void calc(Outer o){  } },
        Z{  public void calc(Outer o){ } };
        abstract void calc(Outer o);
    }

    public void doCalc(){
        for(MyEnum item:MyEnum.values()){
            item.calc(this);
        }
    }
}


class ClassA {}
class ClassB {}
class ClassC {}
Run Code Online (Sandbox Code Playgroud)