【问题标题】:Converting Object[] to ArrayList<V>[] in Java在 Java 中将 Object[] 转换为 ArrayList<V>[]
【发布时间】:2014-07-08 14:04:37
【问题描述】:

以下代码抛出 ClassCastException:

ArrayList<V>[] table = (ArrayList<V>[]) new Object[tableSize];

如果这不起作用,我该如何创建一个 ArrayList 数组?

编辑:

请确保每个人都理解问题所在。我需要一个包含多个 ArrayList 的 Array。

EDIT2:

tableSize 是一个整数。

【问题讨论】:

标签: java object arraylist


【解决方案1】:

编辑:好的,这是你可以做的:

ArrayList<String>[] table = new ArrayList[tableSize];

它可以在我正在使用的 Java 8 上编译和工作。

【讨论】:

  • 啊,您在 ArrayList 和 tablesize 之间使用 的上一个版本。这行得通。谢谢。
  • 它也适用于List&lt;String&gt;[] table = new List[tableSize];。这真的很有趣。
  • 兴趣点,List是一个接口,但是可以做一个接口数组,没问题。
【解决方案2】:

在 Java 的情况下,您不能创建类型为泛型的数组的新实例。

T[] array = new T[size]; - 导致编译错误Cannot create a generic array of T

当你尝试使用它时会出现同样的错误

ArrayList&lt;T&gt;[] array = new ArrayList&lt;T&gt;[size];

出于同样的原因。 Java运行时编译后不知道T是什么,因此无法分配有效的内存空间。

要通过此问题,您有以下选择:

  • 删除泛型类型并使用原始类型。

ArrayList[] array =new ArrayList[size];

  • 使用列表的列表

List&lt;List&lt;T&gt;&gt; list = new ArrayList&lt;List&lt;T&gt;&gt;();

【讨论】:

    【解决方案3】:

    不是最顺利的方法但是如果我正确地回答了你的问题,这样的事情应该可以解决问题:

    int tableSize = 2;
    Collection<String> listWithItems = new ArrayList<>();
    listWithItems.add("Foo");
    listWithItems.add("Bar");    
    
    Collection<Collection<String>> listOfList = new ArrayList<>();
    listOfList.add(listWithItems);    
    
    Object[] array = listOfList.toArray(new Object[tableSize]);    
    
    System.out.println("Col: " + listOfList);
    System.out.println("Array: " + Arrays.toString(array));
    

    打印出来的是:

    Col: [[Foo, Bar]]
    Array: [[Foo, Bar], null]
    

    没有额外“绒毛”来获取初始数组的简短示例:

    Object[] theArrayOfLists = new ArrayList<List<SomeClass>>().toArray(new Object[tableSize]);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-09
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 2013-08-12
      • 2015-01-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多