gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:45:16 27 4
gpt4 key购买 nike

我有一组共享一些共同属性的类,所以我让它们都扩展了一个共同的基类,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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com