【发布时间】:2014-12-27 09:55:15
【问题描述】:
我不知道表达我的问题的最佳方式,但我无法将 ArrayList<class_that_implements_comparable> 作为参数 ArrayList<Comparable> 传递给不同类中的方法。
假设我在一个驱动程序类中有两个 ArrayList:
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)。效果很好。
但是,如果我将排序方法的签名更改为具有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>?
有没有一种方法可以直接转换它而不必使用额外的方法?
非常感谢您抽出宝贵的时间以及您能提供的任何见解!
【问题讨论】: