无法将 ArrayList<ArrayList<Integer>> 转换为 ArrayList<ArrayList<Object>>
Cannot convert ArrayList<ArrayList<Integer>> to ArrayList<ArrayList<Object>>
我有一个接受参数 ArrayList<ArrayList<Object>>
的函数 foo
。当我尝试通过传递类型为 ArrayList<ArrayList<Integer>>
的变量来调用该函数时,编译器显示错误消息:
incompatible types:
java.util.ArrayList<java.util.ArrayList<java.lang.Integer>>
cannot be converted into
java.util.ArrayList<java.util.ArrayList<java.lang.Object>>
我应该 change/do 做什么才能使函数接受任何类型的 2D ArrayList
参数?提前致谢。
示例代码
public static ArrayList<ArrayList<Object>> foo (ArrayList<ArrayList<Object>> parameter)
{
//do something
}
调用函数
ArrayList<ArrayList<Integer>> parameter;
//do something with the parameter
ArrayList<ArrayList<Integer>> product = foo(parameter);//red line under parameter indicate it has error
使其通用:
public static <T> ArrayList<ArrayList<T>> foo (ArrayList<ArrayList<T>> parameter) {
//do something
// you probably want to create a new 2D ArrayList somewhere around here
ArrayList<ArrayList<T>> ret = new ArrayList<>();
//do more somethings
}
有2种解决方案:
1.Use 泛型(顺便说一句应该使用 List 而不是 ArrayList)
public static <T> List<List<T>> foo(List<List<T>> parameter) {
//do something
}
public void test() {
List<List<Integer>> parameter;
//do something with the parameter
List<List<Integer>> product = foo(parameter);
}
2.Use 嵌套通配符:
public static List<? extends List<? extends Object>> foo(List<? extends List<? extends Object>> parameter) {
//do something
}
public void test() {
List<List<Integer>> parameter = new ArrayList<>();
//do something with the parameter
foo(parameter);
}
我有一个接受参数 ArrayList<ArrayList<Object>>
的函数 foo
。当我尝试通过传递类型为 ArrayList<ArrayList<Integer>>
的变量来调用该函数时,编译器显示错误消息:
incompatible types:
java.util.ArrayList<java.util.ArrayList<java.lang.Integer>>
cannot be converted into
java.util.ArrayList<java.util.ArrayList<java.lang.Object>>
我应该 change/do 做什么才能使函数接受任何类型的 2D ArrayList
参数?提前致谢。
示例代码
public static ArrayList<ArrayList<Object>> foo (ArrayList<ArrayList<Object>> parameter)
{
//do something
}
调用函数
ArrayList<ArrayList<Integer>> parameter;
//do something with the parameter
ArrayList<ArrayList<Integer>> product = foo(parameter);//red line under parameter indicate it has error
使其通用:
public static <T> ArrayList<ArrayList<T>> foo (ArrayList<ArrayList<T>> parameter) {
//do something
// you probably want to create a new 2D ArrayList somewhere around here
ArrayList<ArrayList<T>> ret = new ArrayList<>();
//do more somethings
}
有2种解决方案:
1.Use 泛型(顺便说一句应该使用 List 而不是 ArrayList)
public static <T> List<List<T>> foo(List<List<T>> parameter) {
//do something
}
public void test() {
List<List<Integer>> parameter;
//do something with the parameter
List<List<Integer>> product = foo(parameter);
}
2.Use 嵌套通配符:
public static List<? extends List<? extends Object>> foo(List<? extends List<? extends Object>> parameter) {
//do something
}
public void test() {
List<List<Integer>> parameter = new ArrayList<>();
//do something with the parameter
foo(parameter);
}