我已经看到在 Java 8 中,可以像这样定义一个比较器:
Comparator c = (Computer c1, Computer c2) -> c1.getAge().compareTo(c2.getAge());
这相当于:
Comparator d = new Comparator<Computer> () {
@Override
public int compare(Computer c1, Computer c2){
return c1.getAge().compareTo(c2.getAge());
}
};
我想了解这是如何工作的。在第二个示例中,它相当简单:Comparator使用方法创建一个对象,该方法通过使用的属性中的方法compare执行比较。当我们这样做时,我们会简单地调用此方法:compareToageComputer
Computer comp1 = new Computer(10);
Computer comp2 = new Computer(11);
d.compare(comp1, comp2); // -1
但是在第一个示例中,当使用 lambda 时发生了什么?在我看来,我们将 设置Comparator为等于执行比较的方法。但这不可能,因为Comparator对象是具有方法的对象compare。我了解到 lambda 可以与功能接口(只有一种方法的接口)一起使用。但Comparator它不是一个功能接口(它有许多其他方法,除了compare!)。那么Java解释器怎么知道它是compare我们正在实现的方法呢?
芜湖不芜
一只名叫tom的猫
相关分类