java 尽管数组不是泛型的,但编译器提示“无法创建泛型数组”[重复]

8dtrkrch  于 2023-02-02  发布在  Java
关注(0)|答案(1)|浏览(203)
    • 此问题在此处已有答案**:

Generic List of Array(5个答案)
2天前关闭。
我创建了类Queue,其中

import java.util.LinkedList;
public class Queue <T>{
        private LinkedList<T> list;

        public Queue() {
            list = new LinkedList<>();
        }

        ...
}

我还创建了类Cinema,它有一个Queue<String>数组的私有字段。

public class Cinema {
    private Queue<String>[] arr;
    
    public Cinema() {
        arr = new Queue<String>[10];
        for (int i = 0; i < 10; i++)
            arr[i] = new Queue<String>();
    }

        ...
}

然而,arr = new Queue<String>[10];行抛出了一个编译错误,显示为Cannot create a generic array of Queue<String>,但据我所知,该数组不是泛型的,因为其泛型类型被定义为String
当我将行更改为

arr = new Queue[10];

这段代码又可以工作了,尽管它仍然给我一个Type safety: The expression of type Queue[] needs unchecked conversion to conform to Queue<String>[]的警告。所以我不明白为什么原来的代码不工作。

svmlkihl

svmlkihl1#

但据我所知,数组不是泛型的,因为它的泛型类型被定义为String。
同一个词的不同含义。编译器的意思是:在数组类型的任何地方都涉及到<>和/或类型变量,这是你不能做的。
数组是低级结构,除了定义新集合概念的类之外,你不会使用它。这里你不会这么做。抛弃数组,创建一个List<Queue<String>>
如果你坚持使用数组,你就这么做了:arr = new Queue[10]。是的,这会得到一个警告。你唯一能做的就是接受它,或者使用@SuppressWarnings。数组和泛型不能很好地混合。因此,不要使用List<Queue<String>>

相关问题