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

标签 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

它没有。

这正常吗?有什么方法可以为参数化函数传递构造函数引用吗?

最佳答案

没有参数的构造函数将是 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/

相关文章:

java - getServingUrl() 方法使用谷歌云存储值

java - Android 工作线程卡住主线程

java - Android Adapter 中的 overridePendingTransition 方法

java - 如何使用JDEE环境在Emacs中调试ImageJ插件?

java - MySQL: "error in your SQL syntax"的来源

c++ - 我可以从引用传递的参数返回值声明 const int 吗?

python - 首先对最长项目的列表进行排序

java - 我可以使用 lambda 表达式来累加变量中的总和吗?

c++ - C++ lambda 构造函数参数可以捕获构造变量吗?

reflection - Kotlin:使用(输出)反射比较不同目标对象的属性值