为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以将算术运算符传递给Java中的方法?

是否可以将算术运算符传递给Java中的方法?

慕桂英4014372 2019-12-16 16:12:25
现在,我将不得不编写一个如下所示的方法:public String Calculate(String operator, double operand1, double operand2){        if (operator.equals("+"))        {            return String.valueOf(operand1 + operand2);        }        else if (operator.equals("-"))        {            return String.valueOf(operand1 - operand2);        }        else if (operator.equals("*"))        {            return String.valueOf(operand1 * operand2);        }        else        {            return "error...";        }}如果我可以像这样编写代码,那就太好了:public String Calculate(String Operator, Double Operand1, Double Operand2){       return String.valueOf(Operand1 Operator Operand2);}因此运算符将替换算术运算符(+,-,*,/ ...)有谁知道在Java中是否可以进行类似的操作?
查看完整描述

3 回答

?
LEATH

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));



查看完整回答
反对 回复 2019-12-17
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

Java中的方法参数必须是表达式。运算符本身不是表达式。在Java中这是不可能的。

当然,您可以传递enum表示这些运算符的对象(可能是常量),并采取相应的行动,但您不能将运算符本身作为参数传递。


其他提示

由于您只是开始使用Java,因此最好尽早掌握这些信息以简化您的未来开发。

  • 方法的名字开始与小写:calculate代替Calculate

  • 变量名称开头小写:operator代替Operator

  • Double是引用类型,原始类型的框double

    • 有效的Java 2nd Edition,第49项:优先于基元类型而不是盒装基元

  • 不要return "error..."。代替,throw new IllegalArgumentException("Invalid operator");



查看完整回答
反对 回复 2019-12-17
  • 3 回答
  • 0 关注
  • 285 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信