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

现在,我将不得不编写一个如下所示的方法:


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中是否可以进行类似的操作?


慕桂英4014372
浏览 286回答 3
3回答

LEATH

不,您无法使用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 justString bar = String.valueOf(Operator.ADDITION.apply(3.5, 2));

婷婷同学_

Java中的方法参数必须是表达式。运算符本身不是表达式。在Java中这是不可能的。当然,您可以传递enum表示这些运算符的对象(可能是常量),并采取相应的行动,但您不能将运算符本身作为参数传递。其他提示由于您只是开始使用Java,因此最好尽早掌握这些信息以简化您的未来开发。方法的名字开始与小写:calculate代替Calculate变量名称开头小写:operator代替OperatorDouble是引用类型,原始类型的框double。有效的Java 2nd Edition,第49项:优先于基元类型而不是盒装基元不要return "error..."。代替,throw new IllegalArgumentException("Invalid operator");
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java