Java generic Comparable,其中子类无法相互比较

时间:2010-03-16 21:22:02

标签: java generics

public abstract class MyAbs implements Comparable<MyAbs>

这可行,但如果它们都扩展MyAbs,我就可以将A类和B类相互比较。然而,我想要完成的却恰恰相反。

那么有没有人知道如何让泛型类型成为自己的类?起初看起来像这么简单......

编辑:

用一个例子进一步解释一下。假设你有一个抽象类动物,然后用狗和蚂蚁扩展它。

我不想将蚂蚁与狗比较,但我想比较一只狗和另一只狗。狗可能有一个变量,说明它是什么颜色,这是我想在compareTo方法中使用的。然而,当谈到蚂蚁时,我宁愿比较蚂蚁的大小而不是它们的颜色。

希望清除它。可能是一个设计缺陷。

2 个答案:

答案 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可能更好。