3 回答
TA贡献1936条经验 获得超6个赞
不,您无法使用Java做到这一点。编译器需要知道您的操作员在做什么。相反,您可以做的是一个枚举:
public enum Operator
{
ADDITION("+") {
@Override public double apply(double x1, double x2) {
return x1 + x2;
}
},
SUBTRACTION("-") {
@Override public double apply(double x1, double x2) {
return x1 - x2;
}
};
// You'd include other operators too...
private final String text;
private Operator(String text) {
this.text = text;
}
// Yes, enums *can* have abstract methods. This code compiles...
public abstract double apply(double x1, double x2);
@Override public String toString() {
return text;
}
}
然后,您可以编写如下方法:
public String calculate(Operator op, double x1, double x2)
{
return String.valueOf(op.apply(x1, x2));
}
并这样称呼它:
String foo = calculate(Operator.ADDITION, 3.5, 2);
// Or just
String bar = String.valueOf(Operator.ADDITION.apply(3.5, 2));
TA贡献1844条经验 获得超8个赞
Java中的方法参数必须是表达式。运算符本身不是表达式。在Java中这是不可能的。
当然,您可以传递enum
表示这些运算符的对象(可能是常量),并采取相应的行动,但您不能将运算符本身作为参数传递。
其他提示
由于您只是开始使用Java,因此最好尽早掌握这些信息以简化您的未来开发。
方法的名字开始与小写:
calculate
代替Calculate
变量名称开头小写:
operator
代替Operator
Double
是引用类型,原始类型的框double
。有效的Java 2nd Edition,第49项:优先于基元类型而不是盒装基元
不要
return "error..."
。代替,throw new IllegalArgumentException("Invalid operator");
添加回答
举报