当前位置: 首页 > 面试题库 >

Java中的Enum类中的简化方法

朱季
2023-03-14
问题内容

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

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}

但是,如果我有更多的类,则该参数看起来太难看了。有没有更好的方法来做这种事情?


问题答案:

为什么不将external的实例传递给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 {}


 类似资料:
  • 问题内容: 我有一个方法可以说: 正如您所注意到的,我有一个名为align的参数。在此方法内部,我将对值是“左”还是“右”有一些if条件。.将参数设置为String,显然我可以传递任何字符串值..我想知道是否有可能将Enum值用作方法参数,如果是,如何? 以防万一有人想到这个;我考虑过使用布尔值,但我并不喜欢它。首先,如何将true / false与left / right关联?(好的,我可以使用

  • 本文向大家介绍java 中枚举类enum的values()方法的详解,包括了java 中枚举类enum的values()方法的详解的使用技巧和注意事项,需要的朋友参考一下 java 中枚举类enum的values()方法的详解 前言:  关于枚举,相信使用的已经很普遍了,现在主要写的是枚举中的一个特殊方法,values(), 为什么说特殊呢,因为在Enum 的 API 文档中也找不到这个方法。接下

  • 问题内容: 我正在尝试在一个抽象类中创建一个抽象方法,该抽象类将自己的Enum作为参数。但是我也希望枚举是通用的。 所以我这样宣布: 在实现中,我列举了一个枚举: 并且方法声明变为: 但是,如果我这样做: 我无法访问并显示错误消息: 我做了这样的解决方法: 但是我想知道是否有可能无法通过我的解决方法? 问题答案: 在您的方法实现中,不是枚举,而是类型参数(通常称为)。因此,它掩盖了与已经说过的ax

  • 问题内容: 在Java 7中,可以选择添加注释来抑制在编译带有不可修改的varargs参数的方法时收到的警告。Project Coin的提案规定,当该方法确保仅将与varargs参数相同类型的元素存储在varargs数组中时,应使用注释。 非安全方法的一个例子是什么? 问题答案: 例如,不安全,可能会将非T存储在数组中,从而在[2]处引起问题 通过使用@SafeVarargs标记该方法,您可以向编

  • 本文向大家介绍遍历Java中的Enum值,包括了遍历Java中的Enum值的使用技巧和注意事项,需要的朋友参考一下 Enum类是所有Java语言枚举类型的通用基类。 示例 我们来看一个使用for循环迭代枚举值的示例- 输出结果 示例 现在让我们来看另一个示例,该示例遍历对每个使用的枚举值- 输出结果

  • 问题内容: 我正在寻找类似于Objective-C的class方法的行为,因为该方法在类初始化时被调用一次,此后不再被调用。 一个简单的闭合将非常时尚!而且很显然,当我们在结构闭包中使用“ s”而不是“ s”时,这一切都将非常匹配! 问题答案: 如果您有一个Objective-C类,最简单的方法就是重写。但是,请确保您的类的 子 类也被覆盖,否则您的类的 子 类可能会被多次调用!如果需要,可以使用