我意识到不理解这一点可能会表明我对 Java 的理解存在更深层次的问题,但是在检查 java se 文档时,它确实声明 Comparator 是一个接口。然后,当我创建“比较器”对象时,我只能这样做,因为我导入了 java.util.Comparator。
但是鉴于接口没有定义方法并且接口没有构造函数(或者它们......?),我如何实例化比较器对象?定义的方法从哪里来?
java.uti.Comparator 是一个接口。接口无法实例化,只能由类实现或由其他接口扩展。
如果一个类声明实现一个接口,则该接口定义的所有方法都必须出现在其源代码中,该类才能成功编译。
对于给定的 Type T(T 是需要比较的对象的类类型),与任何其他对象实例化不同,通常会实例化一个实现比较器的匿名类,而不是接口本身。这就像任何其他对象及其类型比较器一样,因此可以作为参数传递给 Collections.sort 或 Arrays.sort 方法。
Comparator<T> c = new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
return 0;
}
};
这里使用了Java匿名类的概念。
请参考此链接来理解这个概念: https://www.javatpoint.com/anonymous-inner-class