【问题标题】:Cannot convert ArrayList<ArrayList<Integer>> to ArrayList<ArrayList<Object>>无法将 ArrayList<ArrayList<Integer>> 转换为 ArrayList<ArrayList<Object>>
【发布时间】:2019-09-02 10:45:05
【问题描述】:

我有一个函数foo,它接受一个参数ArrayList&lt;ArrayList&lt;Object&gt;&gt;。当我尝试通过传递ArrayList&lt;ArrayList&lt;Integer&gt;&gt; 类型的变量来调用函数时,编译器显示错误消息:

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

【问题讨论】:

  • 向我们展示您的代码。
  • 如果适合您的目的,您可以让您的方法接受ArrayList&lt;ArrayList&lt;?&gt;&gt;。如果不进行强制转换,您将无法将任何东西放入其中,但您可以从中取出对象。
  • 我试过ArrayList&lt;?&gt;,但它不起作用。当我尝试启动它时也会出现问题new ArrayList&lt;?&gt;
  • 你不能实例化&lt;?&gt;泛型类型;您只能使用它来引用现有对象

标签: java object arraylist boxing


【解决方案1】:

有两种解决方案:

1.使用泛型(顺便说一句,应该使用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);
}

【讨论】:

  • 感谢您的帮助,非常感谢。
【解决方案2】:

使其通用:

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
}

【讨论】:

  • 感谢您的帮助,非常感谢。
  • 顺便说一句,我可以知道T?Object在java中的区别吗?
  • 没问题! quora.com/…
  • 感谢您的链接,它确实有帮助。
猜你喜欢
  • 2014-05-09
  • 1970-01-01
  • 2012-10-21
  • 2021-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
  • 1970-01-01
相关资源
最近更新 更多