java - 简化Java中Enum类中的方法

标签 java enums

我有一个包含用于计算的枚举的类。 每个枚举都使用来自外部类的部分或全部非静态变量。但是,由于它们无法访问实例变量,我必须将它们作为参数传递。

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/

相关文章:

enums - 如何避免使用 Swift 2.0 枚举重复自己

python - 获取字符串转换的枚举值

java - 枚举、单例和反序列化

java - 如何将我的状态机转换为 java?

java - Java如何处理以|分隔的参数?

java - 将我的应用程序的 http 请求重定向到 spring webflow 中的外部网站

java集合转换慢

java - Struts 2 #{} 在 Netbeans 7.3 中给出编译错误

java - 使用 Spring 的线程安全 Struts Web 应用程序

typescript - 通过枚举名称字符串获取枚举值