Java Generics:无法创建嵌套类的数组

我正在尝试将AVLTree实现转换为堆样式数组,并且在generics方面存在一些问题:

public class MyAVLTree<K extends Comparable, E> implements OrderedDictionary { class AVLNode implements Locator{ // ... } // .... public Locator [] toBSTArray() { AVLNode[] bArray = new AVLNode[size]; makeArray(root, 0, bArray); // recursion return bArray; } } 

在行AVLNode[] bArray = new AVLNode[size]; 我收到以下错误:

“无法创建MyAVLTree.AVLNode的通用数组”

我不明白我做错了什么。 有帮助吗?

内部类从外部类中捕获类型变量,因此这就是您得到错误的原因。

如果您希望实例化原始AVLNode[]您可以将类名限定为原始MyAVLTree

 // vvvvvvvvv AVLNode[] bArray = new MyAVLTree.AVLNode[size]; 

您将获得警告,因为您通常会创建一个原始数组类型; 但是这会编译。 如果您不了解原始类型,请注意常见的事物,尽管当然您无法在Java中实例化非原始数组。

这听起来很有趣,但你可以这样做:

 AVLNode[] bArray = (AVLNode[]) Array.newInstance(AVLNode.class, size);