3 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超4個(gè)贊
不,您無(wú)法使用Java做到這一點(diǎn)。編譯器需要知道您的操作員在做什么。相反,您可以做的是一個(gè)枚舉:
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;
}
}
然后,您可以編寫(xiě)如下方法:
public String calculate(Operator op, double x1, double x2)
{
return String.valueOf(op.apply(x1, x2));
}
并這樣稱(chēng)呼它:
String foo = calculate(Operator.ADDITION, 3.5, 2);
// Or just
String bar = String.valueOf(Operator.ADDITION.apply(3.5, 2));

TA貢獻(xiàn)1803條經(jīng)驗(yàn) 獲得超6個(gè)贊
Java中的方法參數(shù)必須是表達(dá)式。運(yùn)算符本身不是表達(dá)式。在Java中這是不可能的。
當(dāng)然,您可以傳遞enum
表示這些運(yùn)算符的對(duì)象(可能是常量),并采取相應(yīng)的行動(dòng),但您不能將運(yùn)算符本身作為參數(shù)傳遞。
其他提示
由于您只是開(kāi)始使用Java,因此最好盡早掌握這些信息以簡(jiǎn)化您的未來(lái)開(kāi)發(fā)。
方法的名字開(kāi)始與小寫(xiě):
calculate
代替Calculate
變量名稱(chēng)開(kāi)頭小寫(xiě):
operator
代替Operator
Double
是引用類(lèi)型,原始類(lèi)型的框double
。有效的Java 2nd Edition,第49項(xiàng):優(yōu)先于基元類(lèi)型而不是盒裝基元
不要
return "error..."
。代替,throw new IllegalArgumentException("Invalid operator");
添加回答
舉報(bào)