我怎样才能多次实现Comparable?

时间:2010-04-21 18:27:49

标签: 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

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

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

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

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:8)

我会写几个Comparator并完成它。

答案 2 :(得分:1)

在考虑通配符时,有多个通用接口实现会遇到问题。

这不取决于擦除。