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

use*_*875 5 java arrays generics inner-classes

我正在尝试将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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Rad*_*def 3

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

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

//                     vvvvvvvvv
AVLNode[] bArray = new MyAVLTree.AVLNode[size];
Run Code Online (Sandbox Code Playgroud)

您将收到警告,就像您通常创建原始数组类型一样;但是这会编译。如果您不了解原始类型,请注意它们的常见内容,尽管您当然无法在 Java 中实例化非原始数组。