我正在尝试将AVLTree实现转换为堆样式数组,并且在泛型方面存在一些问题:
public class MyAVLTree<K extends Comparable<? super K>, E> implements
OrderedDictionary<K, E> {
class AVLNode implements Locator<K, E>{
// ...
}
// ....
public Locator<K,E> [] toBSTArray() {
AVLNode[] bArray = new AVLNode[size];
makeArray(root, 0, bArray); // recursion
return bArray;
}
}
在第AVLNode[] bArray = new AVLNode[size];
行,我收到以下错误:
“无法创建MyAVLTree.AVLNode的通用数组”
我看不出我做错了什么。有什么帮助吗?
答案 0 :(得分:3)
内部类从外部类中捕获类型变量,因此这就是您收到错误的原因。
如果您希望实例化原始AVLNode[]
,则可以将类名称限定为原始MyAVLTree
:
// vvvvvvvvv
AVLNode[] bArray = new MyAVLTree.AVLNode[size];
您将收到警告,因为您通常会创建原始数组类型;但是这会编译。如果您不了解它们,请注意通常的事情that come along with raw types,尽管当然您无法在Java中实例化非原始数组。
答案 1 :(得分:0)
这听起来很有趣,但你可以做这样的伎俩:
AVLNode[] bArray = (AVLNode[]) Array.newInstance(AVLNode.class, size);