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:我应该提到的是,参数化类型必须是在同A在B.因此,通过<E>对内部类是不可能的,因为它创造E#2和叶A用E#1.
您调用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;也可能是一个实际上更快(无边界检查)并且需要更少内存(无数组对象;无大小信息)的选项。
| 归档时间: |
|
| 查看次数: |
944 次 |
| 最近记录: |