java - 如何实现比以前更多的可以比较?

  显示原文与译文双语对照的内容

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

我有以下类/接口:


interface Foo extends Comparable<Foo>

interface Bar extends Comparable<Bar>

abstract class BarDescription implements Bar

class FooBar extends BarDescription implements Foo

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

为什么不能在FooBar中实现与( Foo Foo ) 实现的compareTo和,以及在BarDescription中实现的compareTo(Bar)? 这不是简单的方法重载?

编辑:我有许多扩展BarDescription的类。 如果我删除了在Bar上可以比较的类型参数,将它的保留在原始状态,那么在对扩展BarDescription的所有类进行排序时,就会得到一。 下面的通配符回答会解决这个问题? 这个答案看起来相当复杂,很难理解。

时间: 原作者:

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

这样做的限制:你不能实现/扩展两个或者多个与泛型参数相同的接口/类,并且它们与泛型参数是不同的。

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


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>

我会写几本 Comparator的书,然后用它完成。

原作者:

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

这不依赖于擦除。

...