如何在Java中使用超类型的泛型类?

时间:2012-01-07 02:46:58

标签: java generics arraylist supertype

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

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

类Spatial是分拣机的实现,如下所示:

public abstract class Spatial implements Sorter

然而,当调用quicksort方法时会生成错误(children是Spatial类型的ArrayList):

children = ListSorter.quicksort(children);

有什么想法吗?

2 个答案:

答案 0 :(得分:6)

试试这个:

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

甚至更好,这个:

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

答案 1 :(得分:4)

Java中的泛型不是协变,即List<Sorter>不是List<Spatial>的基类。请参阅此文章,了解其原因:http://www.ibm.com/developerworks/java/library/j-jtp01255/index.html