java - 是否有理由为自身以外的类型实现 java.util.Comparable?

标签 java

<分区>

类实现 Comparable<T>通常自己实现,例如

class MyInteger implements Comparable<MyInteger> { ... }
class MyString implements Comparable<MyString> { ... }

但是没有什么可以阻止你为不同的类型实现它:

class MyString implements Comparable<MyInteger> { ... }

这将允许您比较 MyStringMyInteger .

如描述in the Javadoc , Comparable旨在模拟自然排序,即 total order ,所以为了能够具有反对称性,compareTo 的参数类型应该与定义该方法的类型相同。

但是实现 class SomeType implements Comparable<OtherType> 有任何实际用途(滥用)吗? ?


更新:Joni 的答案和 I提供了实际示例,其中 Comparable<Supertype>是隐式实现的,即您的类可传递地实现该接口(interface)。很想知道是否有人有可以显式使用它的示例。

最佳答案

如果存在父/子关系,您会发现这一点。例如,枚举类实现了 Comparable<E> E 是类型参数。所有枚举共享这个 compareTo 实现。

澄清:Enum<ConcreteClass>工具 Comparable<ConcreteClass> .如果它遵循您期望它实现的模式 Comparable<Enum<ConcreteClass>>

关于java - 是否有理由为自身以外的类型实现 java.util.Comparable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41759716/

相关文章:

java - 如何避免java中的 "non-static method referenced from a static context"?真的很简单

java - 在 macOS 上使用 DTrace 分析 Java 应用程序

java - 我的 java while 循环没有返回每周工资

java - Maven 和代码指标 : check for existence of a test case for each class

java - Spring Data JPA + Lombok = 保存期间出现 UnsupportedOperationException

java - Eclipse 中的奇怪行为

java - 如何在 ProdctData JSON 中填充自定义属性?

java - NetBeans 无法识别导入的类

java - 使用 vlcj 流式传输视频文件

根据场景属性的Javafx Mediaview设置