gpt4 book ai didi

Java lambda 表达式 - 如何省略接口(interface)名称?

转载 作者:行者123 更新时间:2023-12-03 04:37:18 24 4
gpt4 key购买 nike

我正在阅读有关 lambda 表达式的 Oracle 教程:https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

To specify the search criteria, you implement the CheckPerson interface:

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;
}
}
);

然后

The CheckPerson interface is a functional interface. A functional interface is any interface that contains only one abstract method. (A functional interface may contain one or more default methods or static methods.) Because a functional interface contains only one abstract method, you can omit the name of that method when you implement it. To do this, instead of using an anonymous class expression, you use a lambda expression, which is highlighted in the following method invocation:

printPersons(
roster,
(Person p) -> p.getGender() == Person.Sex.MALE
&& p.getAge() >= 18
&& p.getAge() <= 25
);

他们说他们省略了该方法,我在 lambda 中没有看到 test - 这很清楚。但他们也删除了接口(interface) CheckPerson 的名称。为什么解释中没有提到呢?我们是否在 lambda 中使用 CheckPerson 接口(interface)?

于 2019 年 8 月 29 日添加:
感谢 Alexey Soshin、Andrew Tobilko、Andreas(按回答时间顺序)的回答!我认为你们的回答是互相称赞,以提供全面的信息,因此我不能只选择一个接受。

最佳答案

Do we use the CheckPerson interface in lambda or not?

我们不使用它,我们定义它。我们给它一个实现。我们通过编写 lambda 表达式来实现该接口(interface)。

“in lambda”是您的误解,因为 lambda 该接口(interface)的一个实例。

They say they omit the method, I see no test in lambda - that is clear. But they also dropped name of interface CheckPerson.

这不是“丢弃”或“省略”某些东西。它是用一种语法结构替换另一种语法结构。您可以使用 lambda 表达式替换匿名类,以使代码更具表现力且更简洁。

关于Java lambda 表达式 - 如何省略接口(interface)名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57696871/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com