为了只使用来自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