[英]Java How to chain with Math class
我只是學習Java的基礎知識,我曾嘗試搜索此答案,但也許我不知道要搜索什么。 我想對一個數字執行多項操作,到目前為止,我唯一知道的方法就是讓中間變量一次執行一次操作。 這不是最好的方法。 以下是我希望工作的主要方法中的代碼:
double sqrtAbsInput = promptForDouble("I can get the square root of the absolute value.");
double sqrtAbsOutput = sqrtAbsInput.Math.abs().sqrt();
System.out.println(sqrAbsOutput);
promptForDouble()
方法返回一個double,這是我最關心的第二行。 我得到的錯誤是
“錯誤:不能取消引用double。”
我假設正在發生的事情是變量必須是Math
類方法的參數,但我知道它也可能與變量是原始類型有關。
abs
和sqrt
不是double
方法(這是一種原始方法,因此無論如何都沒有任何方法-正如您收到的錯誤消息中所述),而是Math
靜態方法,該方法將double
作為參數,並且返回一個double
結果:
double sqrtAbsOutput = Math.sqrt(Math.abs(sqrtAbsInput));
Math
類沒有實現“構建器模式”(出於效率原因),但是您可以創建自己的允許鏈接的Math類實現。
這是一個例子:
public class MathBuilder {
private double value;
public MathBuilder(double value) {
this.value = value;
}
public MathBuilder abs() {
value = Math.abs(value);
return this;
}
public MathBuilder sqrt() {
value = Math.sqrt(value);
return this;
}
// other builder-math methods...
public double build() {
return value;
}
}
用法:
double result = new MathBuilder(-10).abs().sqrt().build();
或使用Java 8:
public class MathBuilder {
private double value;
public MathBuilder(double value) {
this.value = value;
}
public MathBuilder apply(DoubleUnaryOperator o) {
value = o.applyAsDouble(value);
return this;
}
public double build() {
return value;
}
}
用法:
double result = new MathBuilder(-10)
.apply(Math::abs)
.apply(Math::sqrt)
.build();
您將必須執行以下操作:
System.out.println(Math.sqrt(Math.abs(sqrtAbsInput)));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.