【发布时间】:2012-05-27 03:43:15
【问题描述】:
我正在尝试使用泛型实现链接集合,如下所示。
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
A 是集合,B 是集合中的元素或节点,其中包含引用后继/前任和项目的数组。
不允许创建数组。我得到的错误是generic array creation。我认为它实际创建的是A<E>.B 的数组是否正确?
如果不是,是什么导致了错误?
如果是这样,我该如何解决这个问题?
我显然省略了大量的代码,如果我提供的还不够,请告诉我。任何意见,将不胜感激。谢谢。
编辑 1: 我应该提到A 中的参数化类型必须与B 中的相同。所以将<E> 传递给内部类是不可能的,因为它会创建E#2 并将A 与E#1 分开。
【问题讨论】:
-
不是专门回答您的问题,但最好设计两个变量“前驱”和“后继”类型 B,而不是两个元素的数组。将使您的课程更易于阅读。我想这也会让你的问题消失?
-
WRT Edit1,尝试
static class B<E>,您将不会遇到命名问题。但是,该数组仍然无法工作,因为它是通用的。 -
你也可以通过使用泛型集合而不是数组来解决这个问题。
-
如果
b确实总是有两个元素,那么最好使用两个字段。