public abstract class MyAbs implements Comparable<MyAbs>
这会起作用,但如果 A 类和 B 类都扩展了 MyAbs,那么我将能够相互比较它们。然而,我想要完成的恰恰相反。
那么有没有人知道让泛型类型成为自己的类的方法?乍一看似乎是一件如此简单的事情......
编辑:
再举个例子来解释一下。假设你有一个抽象类动物,然后你用狗和 Ant 扩展它。
我不想将 Ant 与狗进行比较,但我想将一只狗与另一只狗进行比较。狗可能有一个变量说明它是什么颜色,这就是我想在 compareTo 方法中使用的颜色。然而,当谈到 Ant 时,我宁愿比较 Ant 的大小而不是它们的颜色。
希望一切都过去了。然而,可能是设计缺陷。
最佳答案
最直接的是:
public abstract class MyAbs<T> implements Comparable<T>
也许更有用的是,您可以使用 Enum
样式:
public abstract class MyAbs<THIS extends MyAbs<THIS>> implements Comparable<THIS>
您或许可以忽略该问题:
public abstract class MyAbs
外部比较器
对我来说感觉更自然(也就是说,没有自然顺序)。
关于Java 泛型 Comparable,其中子类无法相互比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2458252/