爲了只使用來自java.util.function
的預定義函數接口,我開始想知道爲什麼不能在類型聲明中指定可變參數。例如,我想提供的API,它可以像這樣可變內部類型聲明的規範
object.method((x, y, z) -> x + y - z)
凡method
需要的n個參數數學函數來使用。以下是我希望我的object
界面看起來像
interface I {
I method(ToDoubleFunction<double...> f);
}
我不知道我可以定義自己的funcional接口,或更改API略指定double[]
尖括號。我很好奇,爲什麼上面提到的做法是不可行的。
編輯:
在評論中有一個解釋,爲什麼上面的例子不是可變參數的正確用法。 Radiodef分我quesion成兩個分開的人
- 爲什麼可變參數不允許作爲一個一般的參數和
- 爲什麼你不能在Java中的名字聲明和訪問可變參數。
由於問題的標題,我必須堅持第一個問題。這裏是預期的行爲:
ToDoubleFunction<double...> lambda = (double... d) -> d[0] + d[1] - d[2];
lambda.applyAsDouble(1, 2, 3);
您可以給出一個有用的例子,說明'方法'在這種情況下會做什麼,不知道函數的arity是否仍然會導致有用的操作? – 2014-11-05 18:41:27
Java可變參數不能以這種方式工作'(x,y,z) - > x + y - z'。參數作爲一個數組傳遞,所以你想要做的是按名稱訪問數組索引,可變參數可以使用任意數量的索引來獲取數組。 – Radiodef 2014-11-05 18:45:10
也許值得注意的是,我不認爲你真正想要的是變量arity,而是對n元組的隱式支持。元組更有用,因爲元組仍然是內置的類型。不幸的是,Java不支持元組。 – 2014-11-05 18:55:52