Wil*_*ill 11 java overloading variadic-functions
我有以下类存储对象数组列表.
public class Test {
private List<Object[]> list = new ArrayList<Object[]>();
public void addList(Object... obj) {
list.add(obj);
}
public void addList(List<Object> lst) {
list.add(lst.toArray());
}
}
Run Code Online (Sandbox Code Playgroud)
当我调用以下内容时,addList(Object... obj)
会调用重载方法,但我希望addList(List<Object> lst)
调用它.我怎样才能做到这一点?
public class Main {
public static void main(String[] args) {
Test testObj = new Test();
List<String> myStrings = new ArrayList<String>();
myStrings.add("string 1");
myStrings.add("string 2");
myStrings.add("string 3");
// The variable argument method is called but this is a list!
testObj.addList(myStrings);
}
}
Run Code Online (Sandbox Code Playgroud)
更改List<Object>
为List<?>
捕获任何类型对象的列表.我试过这个,它打印在"列表中":
import java.util.ArrayList;
import java.util.List;
public class Test {
private List<Object[]> list = new ArrayList<Object[]>();
public void addList(Object... obj) {
System.out.println("in object");
list.add(obj);
}
public void addList(List<?> lst) {
System.out.println("in List<?>");
list.add(lst.toArray());
}
public static void main(String[] args) {
Test testObj = new Test();
List<String> myStrings = new ArrayList<String>();
myStrings.add("string 1");
myStrings.add("string 2");
myStrings.add("string 3");
// The variable argument method is called but this is a list!
testObj.addList(myStrings);
}
}
Run Code Online (Sandbox Code Playgroud)
重写非变量方法的类型以使用通配符:
public void addList(List<?> lst) {
list.add(lst.toArray());
}
Run Code Online (Sandbox Code Playgroud)
然后List<String>
将是参数类型的子类型.