内部类的通用数组创建编译错误

com*_*ohn 5 java arrays generics

我正在尝试使用泛型实现链接集合,如下所示.

public class A<E> {

  private class B {

    private B[] b;
    private E item;

    private B() {
      this.b = new B[2];
    }

  } // end inner class B

} // end class A
Run Code Online (Sandbox Code Playgroud)

A是集合,B是集合中的元素或节点,具有引用后继者/前任者和项目的数组.

不允许创建数组.我得到的错误是generic array creation.我是否正确地认为它实际创造的是一系列的A<E>.B

如果没有,导致错误的原因是什么?

如果是这样,我怎么能解决这个问题呢?

我显然省略了大量代码,如果我提供的内容不够,请告诉我.任何意见,将不胜感激.谢谢.

编辑1:我应该提到的是,参数化类型必须是在同AB.因此,通过<E>对内部类是不可能的,因为它创造E#2和叶AE#1.

Ano*_*sse 4

您调用B从外部类继承泛型,因为它不是静态的。而且你不能只是让它静态,因为它E也需要。

因此,您的B.b数组确实需要一个通用的类型,即A<E>.B或者如果您将代码更改为静态内部类A.B<E>(如果您会使用private static class B<E>)。

在Java中,由于泛型的实现方式(通过擦除),数组的类型没有明确定义。一方面,它应该是 的数组B,另一方面,它应该是 的数组Object

最可行的解决方案似乎是Object[]显式使用和强制转换。如果您想提高类型安全性,您当然可以使用ArrayList<B>,它内部也使用Object[]

在您的特定代码中,B b1, b2;也可能是一个实际上更快(无边界检查)并且需要更少内存(无数组对象;无大小信息)的选项。