【发布时间】:2019-08-28 16:47:45
【问题描述】:
我正在阅读关于 lambda 表达式的 oracle 教程:https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
要指定搜索条件,请实现 CheckPerson 界面:
interface CheckPerson {
boolean test(Person p); }
那就用吧
printPersons(
roster,
new CheckPerson() {
public boolean test(Person p) {
return p.getGender() == Person.Sex.MALE
&& p.getAge() >= 18
&& p.getAge() <= 25;
}
}
);
然后
CheckPerson 接口是一个函数式接口。一个功能性的 接口是任何只包含一个抽象方法的接口。 (一种 功能接口可能包含一个或多个默认方法或静态 方法。)因为一个函数式接口只包含一个抽象 方法,您可以在实现时省略该方法的名称。到 这样做,而不是使用匿名类表达式,你使用 lambda 表达式,在下面的方法中突出显示 调用:
printPersons(
roster,
(Person p) -> p.getGender() == Person.Sex.MALE
&& p.getAge() >= 18
&& p.getAge() <= 25
);
他们说他们省略了方法,我在 lambda 中看不到 test - 这很清楚。但他们也删除了接口名称CheckPerson。为什么解释中没有提到?我们是否在 lambda 中使用CheckPerson 接口?
于 2019 年 8 月 29 日添加:
感谢 Alexey Soshin、Andrew Tobilko、Andreas(按回答时间顺序)的回答!我认为您的回答相互补充以提供完整的画面,因此我不能只选择一个作为接受。
【问题讨论】:
-
检查
printPersons方法的签名。它的第二个参数是CheckPerson类型。无需指定,因此在 lamda 表达式中省略。
标签: java