java:多维通用数组创建

dsg*_*dsg 7 java arrays generics multidimensional-array

如何在java中创建通用项的多维数组?

考虑班级:

class A<T>
  {
    T t;
    public A(T t) { this.t = t; }
  }
Run Code Online (Sandbox Code Playgroud)

当我尝试创建一个多维数组时:

A<String>[][] array = new A<String>[2][3];
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

generic array creation
A<String>[][] array = new A<String>[2][3];
                      ^
Run Code Online (Sandbox Code Playgroud)

我尝试了以下方法:

A<String>[][] array = (A<String>[][]) (new Object[2]3]);
Run Code Online (Sandbox Code Playgroud)

但这只是抛出: java.lang.ClassCastException

有什么问题?

(我预计人们会建议使用列表.请解释如何使用数组实现此目的.)

Bal*_*a R 4

我能够做这样的事情

    @SuppressWarnings("unchecked") 
    A<String>[][] array = (A<String>[][]) Array.newInstance(new A<String>("dummy").getClass(), 2, 3);
Run Code Online (Sandbox Code Playgroud)

编辑:

根据 @dsg 的建议,以下内容将跳过临时对象的创建。

    @SuppressWarnings("unchecked") 
    A<String>[][] array = (A<String>[][]) Array.newInstance(A.class, 2, 3);
Run Code Online (Sandbox Code Playgroud)

或(来自@irreputable的建议)

 @SuppressWarnings("unchecked")
 A<String>[][] array = new A[2][3];
Run Code Online (Sandbox Code Playgroud)

  • @dsg 你们真是太有趣了。`Array.newInstance(A.class, 2, 3)` 与 `new A[2][3]` 完全相同 (2认同)