繁体   English   中英

传递ArrayList <SomeClass> 一个单独的类中的方法作为参数ArrayList <Comparable>

[英]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>子类。 所以你需要一些额外的动作来改进你的方法:

  • 允许实现Comparable T extends Comparable所有类型T extends Comparable
  • 允许所有在超类后继承Comparable的类型Comparable<? super T> Comparable<? super T>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM