【问题标题】:Comparator is referred to as both an Object and an Interface比较器被称为对象和接口
【发布时间】:2018-05-28 08:00:11
【问题描述】:

我意识到不理解这可能表明我对 Java 的理解存在更深层次的问题,但是在检查 java se 文档时,它确实指出 Comparator 是一个接口。然后当我创建一个“比较器”对象时,我只能这样做,因为我导入了 java.util.Comparator。

但是给定一个接口没有定义方法并且接口没有构造函数(或者他们..?),我如何实例化一个比较器对象?定义的方法来自哪里?

【问题讨论】:

  • 请出示您用于创建Comparator的代码。
  • 要么创建一个已经实现它的类的实例,要么使用匿名类。我不太明白您的要求 - 您是否了解一般的接口,以及 Comparator 的某些特定内容让您感到困惑,或者您不确定一般的接口?
  • “一个接口不定义方法”,一个接口可以定义(具体默认)方法。实际上,您不仅要“导入”类型,还必须实现它
  • Comparator 是一个接口,“a Comparator”是一个实现该接口的对象。
  • 对,所以当我去 Comparator abc = new Comparator() 发生了什么

标签: java import interface comparator


【解决方案1】:

java.uti.Comparator 是一个接口。接口不能被实例化——它们只能由类实现或由其他接口扩展。

如果一个类声称实现了一个接口,则该接口定义的所有方法都必须出现在其源代码中,然后该类才能成功编译。

对于给定的类型 T(T 是需要比较的对象的类类型),与任何其他对象实例化不同,通常实例化的是实现比较器的匿名类,而不是接口本身。这就像任何其他对象及其类型比较器一样,因此可以作为参数传递给 Collections.sort 或 Arrays.sort 方法。

 Comparator<T> c = new Comparator<T>() {
        @Override
        public int compare(T o1, T o2) {
            return 0;
        }
 };

【讨论】:

    猜你喜欢
    • 2015-05-25
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多