有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java:多维通用数组创建

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

考虑类:

class A<T>
  {
    T t;
    public A(T t) { this.t = t; }
  }

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

A<String>[][] array = new A<String>[2][3];

我得到以下错误:

generic array creation
A<String>[][] array = new A<String>[2][3];
                      ^

我尝试了以下方法:

A<String>[][] array = (A<String>[][]) (new Object[2]3]);

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

有什么办法

(我希望有人推荐使用列表。请解释如何使用数组实现这一点。)


共 (3) 个答案

  1. # 1 楼答案

    new A[][]并将其投射到A<String>[][]

  2. # 2 楼答案

    不能简单地创建特定于类型的泛型数组

    List<String>[] list = new List<String>[2]; //Illegal
    List<?> aa[] = new List<?>[2]; // OK
    ...
    A<?>[][] array = new A<?>[2][3]; // OK
    A[0][0] = new A<String>(...);
    

    这是一篇关于Java1.5泛型的有趣文章,“Java theory and practice: Generics gotchas

  3. # 3 楼答案

    你为什么不这样做:(非通用)

    String[][] non_generic_array = new String[][];
    

    并创建一个实用类来实现您在A<T>中创建的函数(我想有)。例如:

    当你在A中看到这个时:

    public class A<T>
    {
        T obj;
        public A(T obj) { this.obj = obj; }
    
        public void someFunction() { ... }
    }
    

    您可以创建一个实用程序类:

    public class AUtils
    {
    
        public static <T> void someFunction(T obj)
        {
            // Here your code, applied to obj
        }
    
    }