无法将ArrayList <ArrayList <Integer >>转换为ArrayList <ArrayList <Object >>

时间:2019-09-02 10:45:05

标签: java object arraylist boxing

我有一个函数foo,可以接受参数ArrayList<ArrayList<Object>>。当我尝试通过传递类型为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>>

要使该函数接受任何类型的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

2 个答案:

答案 0 :(得分:1)

使其具有通用性:

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
}

答案 1 :(得分:1)

有2种解决方案:

1。使用通用(btw应该使用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。使用嵌套通配符:

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);
}