【问题标题】:How is the Comparable interface is marker interface, with its compareTo() method?Comparable 接口如何是标记接口,以及它的 compareTo() 方法?
【发布时间】:2012-12-24 01:05:18
【问题描述】:

Comparable 接口如何是标记接口,即使它定义了compareTo() 方法? 请详细说明。

【问题讨论】:

  • 您从哪里听到或读到这个?我以前从未听说过 Comparable 称为标记接口。
  • 谁说是marker界面? Serializable 是,没有方法。
  • 我不认为它是一个标记接口,因为它声明了方法(嗯,一个方法......)
  • 类的javadoc 中没有任何地方说它是一个标记接口:/

标签: java oop terminology comparable marker-interfaces


【解决方案1】:

标记界面只是一种设计模式。因此,即使您阅读了“X 是一个标记接口”,除了“X 是一个没有声明方法的接口”之外,这实际上并没有任何意义。

由于Comparable<T> 有一个方法,所以它不用作标记接口。

当您希望将数据附加到类型以便能够在特定情况下使用此数据时,标记接口很有用,Comparable 不是这种情况,它用于提供有效的接口。

我什至不认为 javadoc 中使用标记接口的定义来描述空接口,例如Serializable(虽然不确定)。

【讨论】:

    【解决方案2】:

    它不是一个标记界面。 Java中的标记接口,例如Serializable、Clonnable 和 Remote 用于向编译器或 JVM 指示某些内容;向编译器指示标志。

    【讨论】:

      【解决方案3】:

      引用Wikipedia on Marker interface pattern(强调我的):

      [...] 类实现了一个标记接口,并且与该类的实例交互的方法测试该接口是否存在。 典型接口指定实现类必须支持的功能(以方法声明的形式),而标记接口不需要这样做这种接口的存在表明了实现类的特定行为。混合接口既可以作为标记,也可以指定所需的方法,但如果使用不当,可能会造成混淆。

      话虽如此Comparable<T>可以被称为标记界面,但它令人困惑,我以前从未听说过。

      我无法想象一个类在没有实际向下转换和调用 compareTo() 的情况下测试某个对象是否实现 Comparable<T>

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-21
        • 2011-05-31
        • 1970-01-01
        相关资源
        最近更新 更多