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

如何在Java中使用泛型类的超类型?,java,generics,arraylist,supertype,Java,Generics,Arraylist,Supertype,在我的代码中,有许多ArrayList被传递到排序方法中。每个ArrayList都有不同的泛型类型,但所有这些类型都是Sorter的实现。分拣方法旨在接受类型分拣机的阵列列表。我的问题是,我没有找到一种方法将ArrayList的类型强制转换为它们的超类型,以便将它们传递到sorter方法中。以下是分拣机方法的格式: public static ArrayList<Sorter> quicksort(ArrayList<Sorter> members); 但是,当调用qu

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

public static ArrayList<Sorter> quicksort(ArrayList<Sorter> members);
但是,当调用quicksort方法时,会生成错误(子对象是Spatial类型的ArrayList):


有什么想法吗?

Java中的泛型不是协变的,也就是说,
List
不是
List
的基类。请参阅本文了解原因:。

尝试以下方法:

public static <T extends Sorter> ArrayList <T> quicksort(ArrayList<T> members);
公共静态ArrayList快速排序(ArrayList成员);
或者更好,这是:

public static <T extends Sorter> List <T> quicksort(List<T> members);
公共静态列表快速排序(列表成员);

谢谢你的帮助,解决了我的问题。没问题,很乐意帮忙。如果您认为答案解决了您的问题,请随意将其标记为正确答案。
public static <T extends Sorter> ArrayList <T> quicksort(ArrayList<T> members);
public static <T extends Sorter> List <T> quicksort(List<T> members);