collection.add(()->7 中的 ()-> 的功能是什么;



我知道这将是今天关于Stackoverflow的蹩脚问题......但我仍然想在 Java 中找到以下代码片段的功能

理想情况下,我们应该将"可得分"对象传递给collection.add,但这是什么((->5?以及它如何将int值覆盖到可得分类型

public class ScoreCollectionTest {
public void addTwoNumbersForMean() {
ScoreCollection collection = new ScoreCollection();
collection.add(()->5);
collection.add(()->7);
}
}
public class ScoreCollection {
private List<Scoreable> scores = new ArrayList<>();
public void add(Scoreable scoreable) {
scores.add(scoreable);
}
public int arithmeticMean() {
int total = scores.stream().mapToInt(Scoreable::getScore).sum();
return total / scores.size();
}
}

这是Scoreable界面

public interface Scoreable { 
int getScore(); 
} 

collection.add(()->5);是以下方面的语法糖:

collection.add(new Scoreable() {
@Override
int getScore() {
return 5;
}
});

由于 Scoreable 只有一种方法,因此它有资格作为@FunctionalInterface,并且可以在 lambda 表达式而不是匿名类中使用

不知道 Scoreable 是什么,我假设它是一个带有一个方法(该方法的名称无关紧要(的接口,该方法不带参数并返回一个整数。

编译器将其解释为函数接口(因为它满足函数接口的所有要求(,()->5是始终返回 5 的无参数方法的 lambda 表达式。

最新更新