我有以下类存储对象数组列表。
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());
}
}
当我调用以下内容时,会调用重载的方法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);
}
}
答案 0 :(得分:8)
将List<Object>
更改为List<?>
以捕获任何类型对象的列表。我试过这个并打印在“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);
}
}
答案 1 :(得分:7)
这是Java Generic的问题。您无法将List<String>
分配给List<Object>
。
答案 2 :(得分:7)
重写非变量方法的类型以使用通配符:
public void addList(List<?> lst) {
list.add(lst.toArray());
}
然后List<String>
将是参数类型的子类型。
答案 3 :(得分:6)
List<String>
不是List<Object>
的子类。因此,即使您删除了...
变体,也永远不会调用重载。
答案 4 :(得分:2)
将您的方法更改为
public void addList(List<?> lst) {
list.add(lst.toArray());
}