簡體   English   中英

無法轉換ArrayList <ArrayList<Integer> &gt;到ArrayList <ArrayList<Object> &gt;

[英]Cannot convert ArrayList<ArrayList<Integer>> to ArrayList<ArrayList<Object>>

我有一個函數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

使其通用:

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,使用泛型(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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM