【问题标题】:Array of ArrayList generic using accoladesArrayList 泛型数组使用 accolades
【发布时间】:2021-08-02 03:27:58
【问题描述】:

我想要一个预定义/固定大小的 ArrayList 数组,但 IntelliJ IDEA 会发出错误警告。

这行得通:

String[] allPropsA = {prop.getProperty("xxx",""),prop.getProperty("yyy","")};
String[] allPropsB = new String[]{prop.getProperty("xxx",""),prop.getProperty("yyy","")}

public static ArrayList<String> a = new ArrayList<>();
public static ArrayList<String> b = new ArrayList<>();

ArrayList<ArrayList<String>> allListsA = new ArrayList<ArrayList<String>>();
allLists.add(a);
allLists.add(b);

但这不起作用: ArrayList&lt;String&gt;[] allListsB = {a,b};

它给了我一个错误“java:通用数组创建”。为什么嵌套的 ArrayList 是可能的,而老式的数组却不是?以及如何使用 accolades/fixed-size 样式?

【问题讨论】:

    标签: java arrays generics arraylist


    【解决方案1】:

    您无法创建参数化类型的数组,因此您无法创建数组或数组列表。您可以做几件事。您可以通过以下方式设置数组列表的初始容量:

    new ArrayList&lt;ArrayList&lt;String&gt;&gt;(capacity).

    这样可以确保 ArrayList 不会分配另一个数组缓冲区。

    或者您可以创建一个类来保存数组列表对象,如下所示:

    class ArrayListStringObject {
        ArrayList<String> data;
        public ArrayListStringObject(ArrayList<String> data) {
            this.data = data;
        }
    }
    ArrayListStringObject[] allListsB = {
        new ArrayListStringObject(a),
        new ArrayListStringObject(b),
        new ArrayListStringObject(c),
        ...
    };
    

    【讨论】:

      【解决方案2】:

      您可以创建factory method 来创建ArrayList&lt;String&gt; 的数组。 例如:

      @SuppressWarnings("unchecked")
      public static ArrayList<String>[] newArray(int size){
          return new ArrayList[size]; // ?? Unchecked assignment
      }
      

      Unchecked assignment: 'java.util.ArrayList[]' to 'java.util.ArrayList&lt;java.lang.String&gt;[]' 被隔离在方法体内部:

      ArrayList<String> a = new ArrayList<>();
      ArrayList<Integer> b = new ArrayList<>();        
      ArrayList<String>[] allLists = newArray(2);
      allLists[0] = a;
      allLists[1] = b; // ?? error: incompatible types: ArrayList<Integer> cannot be converted to List<String>
      

      【讨论】:

        猜你喜欢
        • 2014-06-06
        • 1970-01-01
        • 2011-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多