[英]Passing an ArrayList<SomeClass> to a method in a separate class as argument ArrayList<Comparable>
我不知道用来表达我的问题的最佳方法,但是我无法将ArrayList<class_that_implements_comparable>
传递给另一个类中的方法作为参数ArrayList<Comparable>
。
假设我在驱动程序类中有两个ArrayLists:
ArrayList<Person> peopleList;
ArrayList<Place> placeList;
Person类和Place类都实现了Comparable。
然后,在一个名为Sorts的类中,我有两个方法:
public static void sort(ArrayList list){
sortList(list);
}
public static void sortList(ArrayList<Comparable> list)
{
//Code here
}
通过此设置,我可以毫无问题地调用Sorts.sort(peopleList)和Sorts.sort(placeList)。 它完美地运作。
但是 ,如果我将sort方法的签名更改为具有ArrayList<Comparable>
的参数...
public static void sort(ArrayList<Comparable> list){
sortList(list);
}
我的驱动程序类中出现以下错误:
Error:(59, 14) java: method sort in class Sorts cannot be applied to given types;
required: java.util.ArrayList<java.lang.Comparable>
found: java.util.ArrayList<Passenger>
reason: actual argument java.util.ArrayList<Passenger> cannot be converted to java.util.ArrayList<java.lang.Comparable> by method invocation conversion
为什么java允许我使用非泛型ArrayList
参数将泛型ArrayList<>
传递给另一个类,然后使用ArrayList<Comparable>
参数将该ArrayList
传递给另一个方法,但它不允许我传递泛型ArrayList<>
直接到ArrayList<Comparable>
?
有没有办法可以直接转换它而不必使用额外的方法?
非常感谢你的时间和你能提供的任何见解!
您需要传递实现Comparable本身或超类(或超类)的东西。
public static <T extends Comparable<? super T>> void sort(ArrayList<T> list)
当您的方法具有签名静态void排序(ArrayList list)时,它只接受ArrayList的实例。
如果Person实现Comparable,则并不意味着List<Person>
是List<Comparable>
子类。 所以你需要一些额外的动作来改进你的方法:
T extends Comparable
所有类型T extends Comparable
Comparable<? super T>
Comparable<? super T>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.