我有一个包含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)
| 归档时间: |
|
| 查看次数: |
858 次 |
| 最近记录: |