我正在尝试将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];行,出现以下错误:



我看不到我在做什么错。有什么帮助吗?

最佳答案

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

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

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

您将像通常创建原始数组类型一样收到警告。但是,它将编译。如果您不知道that come along with raw types的常规信息,则可以将它们告知,尽管您当然不能在Java中实例化非原始的数组。

10-05 22:13