public abstract class MyAbs implements Comparable<MyAbs>
这可行,但如果它们都扩展MyAbs,我就可以将A类和B类相互比较。然而,我想要完成的却恰恰相反。
那么有没有人知道如何让泛型类型成为自己的类?起初看起来像这么简单......
编辑:
用一个例子进一步解释一下。假设你有一个抽象类动物,然后用狗和蚂蚁扩展它。
我不想将蚂蚁与狗比较,但我想比较一只狗和另一只狗。狗可能有一个变量,说明它是什么颜色,这是我想在compareTo方法中使用的。然而,当谈到蚂蚁时,我宁愿比较蚂蚁的大小而不是它们的颜色。
希望清除它。可能是一个设计缺陷。
答案 0 :(得分:4)
最直截了当的是:
public abstract class MyAbs<T> implements Comparable<T>
也许更有用的是,你去Enum
style:
public abstract class MyAbs<THIS extends MyAbs<THIS>> implements Comparable<THIS>
您可能可以忽略此问题:
public abstract class MyAbs
外部Comparator
对我来说更自然(也就是说,没有自然顺序)。
答案 1 :(得分:1)
只需实现Comparable&lt; MyAbs&gt;在B级,如果我正确地解释你的问题,扩展MyAbs。这样,B类的对象可以与其类扩展MyAbs的任何对象进行比较,但反之亦然。但是,如果你想要的是让type参数反映具体类的类型,那么你应该将Comparable传递给一个新的类型参数。
I.E。:
public abstract class MyAbs<T> implements Comparable<T extends MyAbs>
但这当然有缺点,现在您的具体类需要将其定义更改为
public class ConcreteClass extends MyAbs<ConcreteClass>
看起来很讨厌,但它应该有效。在每个具体的类上单独实现Comparable可能更好。