如何传递参数化lambda的构造函数引用?

时间:2014-11-05 12:31:34

标签: java lambda

我的方法看起来像这样。

static void doSomething(Function<Irrelevant, Some> supplier) {
}

当我尝试这样做时,

doSomething((i) -> new Some()); // i is irrelevant

它有效。但是,当我尝试这样做时,

doSomething((i) -> Some::new); // compiler -> bad return type in lambda expression

它没有。

这是正常的吗?有没有办法可以为参数化函数传递构造函数引用?

1 个答案:

答案 0 :(得分:4)

没有参数的构造函数将是Supplier<Some>,因此它与要求Function<Irrelevant, Some>的方法不兼容。

doSomething((i) -> Some::new)中的lambda实际上会接受一些元素并返回对该构造函数的引用,即Supplier<Some> Some本身。您可能正在寻找doSomething(Some::new) - 但正如我所说,这不起作用,因为构造函数与方法的参数不匹配(如果构造函数的参数为​​工作,输入Irrelevant)。

如果参数确实不相关,那么您可以将方法的签名更改为

static void doSomething(Supplier<Some> supplier) {

如果无法做到这一点,那么使用doSomething((i) -> new Some());的方法就完全可以了。