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

标签 java operators math

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

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中这样的事情是否可行?

最佳答案

不,你不能在 Java 中做到这一点。编译器需要知道您的运算符(operator)在做什么。你可以做的是一个枚举:

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

关于java - 是否可以将算术运算符传递给java中的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2902458/

相关文章:

java - 在Android中更改 "Settings"的名称

根据两个输入计算纸币和硬币的变化

c++ - 根据Fermat的小定理未获得预期的输出

c# - 为什么8位字节中的~1等于-2?

java - 用绘制图形方法绘制形状?

java - HibernateTemplate 与 SessionFactory

java - setModel 生成器中的错误

c# - 为什么我们的 C# 图形代码不再工作了?

syntax - Rust 中的 ..=(点点等于)运算符是什么?

go - 为什么 Go 使用 ^ 而不是 ~ 来表示一元按位非?