我有一个包含用于计算的枚举的类。 每个枚举都使用来自外部类的部分或全部非静态变量。但是,由于它们无法访问实例变量,我必须将它们作为参数传递。
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
}
}
}
我的问题是我没有统一的方式来传递for循环中的参数。我可以让每个 Enum 方法接受所有类,例如
public double calc(ClassA _a,ClassB _b,ClassC _c){ dostuff}
但是如果我的类多了,参数就显得太丑了。有没有更好的方法来做这种事情?
最佳答案
为什么不将 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 {}
关于java - 简化Java中Enum类中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6551597/