我知道今天这将是关于Stackoverflow的la脚问题...但是我仍然想在Java中找到以下代码段的功能
理想情况下,我们应该将一个'Scoreable scoreable'对象传递给collection.add,但这是()-> 5是什么?以及如何将int值覆盖为Scoreable类型
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();
}
答案 0 :(得分:5)
collection.add(()->5);
是一种语法糖,用于:
collection.add(new Scoreable() {
@Override
int getScore() {
return 5;
}
});
由于Scoreable只有一种方法,因此它可以称为@FunctionalInterface
,并且可以在lambda表达式中使用,而不是使用匿名类
答案 1 :(得分:0)
不知道什么是Scoreable,我假设它是一个带有一个方法的接口(该方法的名称无关紧要),该方法不带参数并且返回整数。
编译器将其解释为功能接口(因为它满足功能接口的所有要求),()->5
是始终返回5的无参数方法的lambda表达式。