我怎样才能多次实现Comparable?

use*_*270 14 java generics comparable

我正在将一些代码升级到Java 5,我显然不了解泛型.我有其他类实现Comparable一次,我已经能够实现了.但是现在我有一个类,由于继承,最终尝试为2种类型实现Comparable.这是我的情况:

我有以下类/接口:

interface Foo extends Comparable<Foo>

interface Bar extends Comparable<Bar>

abstract class BarDescription implements Bar

class FooBar extends BarDescription implements Foo
Run Code Online (Sandbox Code Playgroud)

有了这个,我得到错误'接口Comparable不能用不同的参数实现多次......'

为什么我不能在FooBar中实现compareTo(Foo foo),还有在BarDescription中实现的compareTo(Bar)?这不是简单的方法重载?

编辑:我有很多扩展BarDescription的类.如果我在Bar上删除Comparable的类型参数,使其保持原始状态,那么在排序扩展BarDescription的所有类时,我会得到一堆编译器警告.这可以通过下面的通配符解答来解决吗?这个答案看起来非常复杂,难以理解维护.

mko*_*ela 14

编译字节码后,泛型不存在.

受此限制:您不能实现/扩展两个或多个没有泛型参数的相同接口/类,并且与泛型参数不同.

如果你真的想要类型安全,你可以做的是:

interface Foo<T extends Foo<?>> extends Comparable<T>
interface Bar<T extends Bar<?>> extends Comparable<T>
abstract class BarDescription<T extends Bar<?>> implements Bar<T>
class FooBar extends BarDescription<FooBar> implements Foo<FooBar>
Run Code Online (Sandbox Code Playgroud)


Jim*_*ley 8

我会写几个Comparator并完成它.