【问题标题】:How do I use the super type of generic class in Java?如何在 Java 中使用泛型类的超类型?
【发布时间】:2012-01-07 02:46:58
【问题描述】:

在我的代码中,我有许多 ArrayLists 被传递到一个排序方法中。这些 ArrayList 中的每一个都有不同的 Generic 类型,但所有这些类型都是 Sorter 的实现。排序方法旨在接受 Sorter 类型的 ArrayList。我的问题是我还没有找到一种方法将数组列表的类型转换为它们的超类型,以便可以将它们传递给排序器方法。下面是 sorter 方法的格式:

public static ArrayList<Sorter> quicksort(ArrayList<Sorter> members);

Spatial 类是 sorter 的一个实现,如下所示:

public abstract class Spatial implements Sorter

但是,当调用快速排序方法时会产生错误(children 是 Spatial 类型的 ArrayList):

children = ListSorter.quicksort(children);

有什么想法吗?

【问题讨论】:

    标签: java generics arraylist supertype


    【解决方案1】:

    试试这个:

    public static <T extends Sorter> ArrayList <T> quicksort(ArrayList<T> members);
    

    或者更好的是:

    public static <T extends Sorter> List <T> quicksort(List<T> members);
    

    【讨论】:

    • 感谢您的帮助,解决了我的问题。
    • 没问题,很高兴为您提供帮助。如果您认为答案解决了您的问题,请随时将答案标记为正确。
    【解决方案2】:

    Java 中的泛型不是协变的,即List&lt;Sorter&gt; 不是List&lt;Spatial&gt; 的基类。为什么不看这篇文章:http://www.ibm.com/developerworks/java/library/j-jtp01255/index.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 1970-01-01
      • 1970-01-01
      • 2017-06-25
      • 1970-01-01
      • 2017-02-02
      • 2021-09-21
      相关资源
      最近更新 更多