如何实现可比较多次?

2022-09-03 13:16:40

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

我有以下类/接口:

interface Foo extends Comparable<Foo>

interface Bar extends Comparable<Bar>

abstract class BarDescription implements Bar

class FooBar extends BarDescription implements Foo

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

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

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


答案 1

编译字节码后泛型不存在。

这方面的限制:您不能实现/扩展两个或多个接口/类,如果没有泛型参数,这些接口/类将相同,并且与泛型参数不同。

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

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>

答案 2

我会写几篇,然后完成它。Comparator


推荐