繁体   English   中英

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

[英]Java Generics: Cannot create an array of a nested class

我正在尝试将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的通用数组”

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM