无法在Java中创建LinkedList数组...?

2022-08-31 10:08:11

我正在研究一个稀疏矩阵类,它需要使用数组 of 来存储矩阵的值。数组的每个元素(即每个)表示矩阵的一行。并且,数组中的每个元素都表示一列和存储的值。LinkedListLinkedListLinkedList

在我的类中,我有一个数组的声明:

private LinkedList<IntegerNode>[] myMatrix;

而且,在我的构造函数中,我尝试定义:SparseMatrix

myMatrix = new LinkedList<IntegerNode>[numRows];

我最终得到的错误是

无法创建 的泛型数组。LinkedList<IntegerNode>

所以,我对此有两个问题:

  1. 我做错了什么,以及
  2. 如果无法创建数组的声明,为什么该类型在声明中是可以接受的?

IntegerNode是我创建的类。而且,我所有的类文件都打包在一起。


答案 1

出于某种原因,您必须强制转换类型并像这样进行声明:

myMatrix = (LinkedList<IntegerNode>[]) new LinkedList<?>[numRows];

答案 2

不能使用泛型数组创建。这是java泛型的一个缺陷/特性。

没有警告的方式是:

  1. 使用列表列表而不是列表数组:

    List< List<IntegerNode>> nodeLists = new LinkedList< List< IntegerNode >>();
    
  2. 声明列表数组的特殊类:

    class IntegerNodeList {
        private final List< IntegerNode > nodes;
    }