java - 如何在 Java 中对泛型类型列表进行排序

标签 java generics sorting

我有一组共享一些共同属性的类,所以我让它们都扩展了一个共同的基类,BaseEntity .所以我有,例如Foo extends BaseEntityBar extends BaseEntity .

我还想要这些 Foo 的列表和 Bar对象是可排序的,所以我实现了 Comparable .我将类定义为 Foo extends BaseEntity implements Comparable<Foo>Bar extends BaseEntity implements Comparable<Bar> ,以及 Foo 列表的排序s 或 Bar s 按预期工作 - 当然,排序的细节在不同的子类中是不同的。但是当我事先不知道我是否会有 Foo 时,我不知道如何进行排序。 s 或 Bar秒。例如,这段代码无法编译:

public class UtilityClass<T extends BaseEntity> {

  ...bunch of stuff...

  List<T> values;

  public List<T> sort() {
    Collections.sort(values);
    return values;
  }

  ...more methods...
}

带有错误信息 Bound mismatch: The generic method sort(List<T>) of type Collections is not applicable for the arguments (List<T>). The inferred type T is not a valid substitute for the bounded parameter <T extends Comparable<? super T>>

我认为问题在于我正在尝试对 BaseEntity 的列表进行排序对象,和 BaseEntity本身不实现 Comparable .但现在我面临一个问题:唯一明智的做法是制作BaseEntity可与其他对象相媲美的对象 BaseEntity对象,但是当我添加 implements Comparable<BaseEntity>BaseEntity , 编译器告诉我现在有问题因为我的 Foo类正在尝试同时实现 Comparable<BaseEntity>Comparable<Foo> , 这显然是不允许的。

我知道我可以通过删除 implements Comparable<Foo> 来回避这个问题并实现 Comparable<BaseEntity> ,然后是我的 compareTo方法将不得不进行丑陋的转换,我认为这正是使用泛型应该避免的问题。

我真正想做的是在 BaseEntity 的签名中指定它的所有子类都是Comparable ,但仅限于同一子类的实例。

非常感谢收到的任何帮助。谢谢!

最佳答案

使用交集类型,如下所示:

public class MyList<T extends BaseEntity & Comparable<T>> {...}

这指定 T 必须是 BaseEntity Comparable 到它自己。

关于java - 如何在 Java 中对泛型类型列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14577910/

相关文章:

java - 使用apache poi将arraylist中的数据插入excel文件中的 block 中

sorting - cli C++ 对某个属性的对象列表进行排序

java - 是否可以将 Mockito 中的某些返回值列入黑名单?

java - Android 蓝牙设备选择器使用

arrays - 创建通用多路复用器

java - 为什么此通用代码会产生 NoSuchMethodError?

java - Typesafe forName 类加载

java - 多线程排序

c - 查找任何范围的序列

Java作业错误