从枚举返回计算值

mKo*_*bel 6 java enums

请问我的问题是两个非常简单

  1. 误解了enum的原样

  2. 这个想法在我的代码中缺少一些重要的抽象

代码示例,其中oprt.calc(x, y)不可编译,有警告 cannot find symbol

public enum Operation {

    PLUS {
        public double calc(double x, double y) {
            return x + y;
        }
    },
    MINUS {
        public double calc(double x, double y) {
            return x - y;
        }
    },
    MULTILPLE {
        public double calc(double x, double y) {
            return x * y;
        }
    },
    DIVIDED_BY {
        public double calc(double x, double y) {
            return x / y;
        }
    };

    public static void main(String args[]) {
        double x = 15.25;
        double y = 24.50;
        for (Operation oprt : Operation.values()) {
            System.out.println(x + " " + oprt + " " 
                    + y + " = " + oprt.calc(x, y));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ada*_*yga 8

你错过的是calc()方法的抽象声明:

enum Operation {

  PLUS {
      public double calc(double x, double y) {
          return x + y;
      }
  },
  MINUS {
      public double calc(double x, double y) {
          return x - y;
      }
  },
  MULTILPLE {
      public double calc(double x, double y) {
          return x * y;
      }
  },
  DIVIDED_BY {
      public double calc(double x, double y) {
          return x / y;
      }
  };

  **public abstract double calc(double x, double y);**

  public static void main(String args[]) {
      double x = 15.25;
      double y = 24.50;
      for (Operation oprt : Operation.values()) {
          System.out.println(x + " " + oprt + " " 
                  + y + " = " + oprt.calc(x, y));
      }
  }
}
Run Code Online (Sandbox Code Playgroud)


JB *_*zet 7

您需要double calc(double x, double y)直接在枚举中声明一个抽象方法,并在每个枚举成员中覆盖它.