我有一个看起来像这样的方法。
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
它没有。
这正常吗?有什么方法可以为参数化函数传递构造函数引用吗?
最佳答案
没有参数的构造函数将是 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());
非常好。
关于java - 如何传递参数化 lambda 的构造函数引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26757289/