【发布时间】:2015-04-17 05:17:15
【问题描述】:
Java 8 允许您在不同的上下文中使用相同的 lambda 表达式。考虑下面的代码来证明这一点:
public class LambdasTypeCheck {
public static void main(String []args) {
//Same lambda expression can be used in different contexts.
Predicate<List<String>> predicate = (l) -> l.add("1");
Consumer<List<String>> consumer = (l) -> l.add("1");
}
}
lambda 表达式(l) -> l.add("1");在两个地方重复。我怎样才能避免这种重复?我可以重用这个 lambda 表达式的一种方法是,如果有一些接口/类是所有 lambda 表达式的父级,这样我就可以将任何 lambda 表达式分配给这样一个接口/类的引用。
【问题讨论】:
-
您是否有一个真实的场景,其中相同的 lambda 表达式可以分配给不同的功能接口?你举的例子没有什么意义。
(l) -> l.add("1")不应用作谓词。 -
目前我没有。这是否意味着我不应该对此感到好奇?我想知道它是否“可以”完成,而不是它是否“应该”完成。此外,该示例仅用于支持我的问题,而不是我在现实世界中使用的东西。
-
虽然这两个 lambda 表达式看起来一样,但它们并不相同。他们的目标类型完全不同,所以这是他们的意图。我敢说谓词 lambda 很糟糕,因为它有副作用。为了保持引用透明度,它应该是
l::contains
标签: lambda java-8 reusability