Java &引用;“通用数组创建”;在处理有关不安全操作的投诉时
以下代码行导致Java &引用;“通用数组创建”;在处理有关不安全操作的投诉时,java,Java,以下代码行导致javac发出不安全操作警告: LinkedList<Node>[] buckets = new LinkedList[bucketCount]; LinkedList[]bucket=新建LinkedList[bucketCount]; 但是,当我尝试通过这样做来解决此问题时: LinkedList<Node>[] buckets = new LinkedList<Node>[bucketCount]; LinkedList[]bucke
javac
发出不安全操作警告:
LinkedList<Node>[] buckets = new LinkedList[bucketCount];
LinkedList[]bucket=新建LinkedList[bucketCount];
但是,当我尝试通过这样做来解决此问题时:
LinkedList<Node>[] buckets = new LinkedList<Node>[bucketCount];
LinkedList[]bucket=新建LinkedList[bucketCount];
我得到一个通用数组创建
错误。我该如何解决这个问题?简而言之
将bucket
转换为LinkedList
的ArrayList
:
ArrayList<LinkedList<Node>> buckets = new ArrayList<LinkedList<Node>>(bucketCount);
for (int i = 0; i < bucketCount; ++i) {
buckets.add(new LinkedList<Node>());
}
ArrayList bucket=新的ArrayList(bucketCount);
对于(int i=0;i
这样,您将获得编译时类型安全性。LinkedList只有两个构造函数,一个是默认构造函数,另一个接受扩展集合的参数
public LinkedList(Collection<? extends E> c) {
this();
addAll(c);
}
公共链接列表(Collection@NPE出于教育目的,我正在实现自己的hashmap。我相信语法是List bucket=newlinkedlist(bucketCount);@NPE这是一个输入错误,左边的类型肯定是一个数组。可能会有一些好的背景信息是的,Java泛型有点像黑客,不能很好地处理这种情况。但是必须使用非数组来规避人为限制是愚蠢的。
List<Node> list = new ArrayList<Node>(bucketCount);