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

时间:2014-11-14 09:40:13

标签: 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;
    }
}

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

  

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

我看不出我做错了什么。有什么帮助吗?

2 个答案:

答案 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);