2 回答
TA贡献1829条经验 获得超7个赞
还有哪些其他类型的数据结构允许这种行为?
-> 您可以通过实现接口 Comparable 对对象进行排序。例如:
public class Car implements Comparable<Car> {
private String name;
@Override
public int compareTo(Car b) {
return name.compareTo(b.name);
}
}
->您也可以在内部类中使用没有覆盖方法比较的比较器。
public class Car implements Comparator<Car> {
private String name;
private double price;
@Override
public int compare(Car b1, Car b2) {
return b1.price - b2.price;
}
}
什么时候编写这种性质的代码比较有利?为什么不覆盖变量声明之外的方法?
-> 想象一下,在使用按名称对对象 Car 进行排序后,您想按其他方式(如按价格、按重量)进行排序。当您想在不同时间以不同方式对对象进行排序时,如何做到这一点?我们在内部类中使用 Comparator 和 define 来做到这一点。
*此外,Comparator 是一个功能接口,因为它是唯一要实现的抽象方法。您可以在一行代码中使用时髦的语法重写:例如:
Compareator<Car> byPrice = (b1,b2) -> b1.price - b2.price;
TA贡献1797条经验 获得超6个赞
这个机制已经在评论中得到了很好的解释。顺便说一句:自 Java 8 以来,这种匿名类的用法被认为有些过时,因为它可以用简单的 Lambda 表达式代替:
tempRequests.sort((l, r) -> l.compareTo(r));
这适用于所有“功能接口”,它被定义为具有恰好一个非静态和非默认方法的接口。
添加回答
举报