如何返回正确的列表类型?

Cra*_*lus 4 java linked-list list arraylist

如果我有这样的方法(为简单起见假设整数):

public static List<Integer> doSomething(List<Integer> list) {
   // logic here  
}
Run Code Online (Sandbox Code Playgroud)

我需要我的处理内部创建一个新列表,我将创建并以某种方式填充并返回给调用者,我怎么能这样做,因为我不知道调用者传入的列表类型是什么?

我不想返回List调用者传入的不同类型.

例如,如果调用者传递一个LinkedList,我希望返回ArrayList.

如何最好地解决这个问题?

Ósc*_*pez 7

你不应该将你的实现绑定到特定的实现List,使用接口的想法是,从外部来看,只要它符合List接口,你实例化的具体类就不重要了.

编辑:

无论如何,这是一种可能的方式:

List<Integer> lst1 = new ArrayList<Integer>();
Class<?> klass1 = lst1.getClass();
List<Integer> copy1 = (List<Integer>) klass1.newInstance();
System.out.println(copy1.getClass().getName());
> java.util.ArrayList

List<Integer> lst2 = new LinkedList<Integer>();
Class<?> klass2 = lst2.getClass();
List<Integer> copy2 = (List<Integer>) klass2.newInstance();
System.out.println(copy2.getClass().getName());
> java.util.LinkedList
Run Code Online (Sandbox Code Playgroud)

正如您在控制台中看到的,副本是与原始列表相同的类的实例.