- 此问题在此处已有答案**:
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>[]
的警告。所以我不明白为什么原来的代码不工作。
1条答案
按热度按时间svmlkihl1#
但据我所知,数组不是泛型的,因为它的泛型类型被定义为String。
同一个词的不同含义。编译器的意思是:在数组类型的任何地方都涉及到
<>
和/或类型变量,这是你不能做的。数组是低级结构,除了定义新集合概念的类之外,你不会使用它。这里你不会这么做。抛弃数组,创建一个
List<Queue<String>>
。如果你坚持使用数组,你就这么做了:
arr = new Queue[10]
。是的,这会得到一个警告。你唯一能做的就是接受它,或者使用@SuppressWarnings
。数组和泛型不能很好地混合。因此,不要使用List<Queue<String>>
。