我正在尝试使用泛型来实现链接的集合,如下所示。
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
是从外部类继承的泛型,因为它不是静态的。而且您不能仅仅使其静态,因为那时它也将需要E
。
因此,您的B.b
数组确实需要一个通用类型,即,A<E>.B
或者如果您将代码更改为 静态 内部类A.B<E>
(如果使用private static class B<E>
)。
在Java中,由于(通过擦除)实现泛型的方式,数组的类型定义不明确。一方面,它应该是的数组;B
另一方面,应该是的数组Object
。
最可行的解决方案似乎是Object[]
显式使用和强制转换。如果您想提高类型的安全性,当然可以使用ArrayList<B>
内部使用的Object[]
!
在您的特定代码中,B b1, b2;
也可能是一个实际上更快(没有边界检查)并且需要更少内存(没有数组对象;没有大小信息)的选项。
问题内容: 嗨,我正在尝试创建一组六边形集(六边形是我创建的类)。 但是当我尝试编译时出现此错误 我该如何解决? 问题答案: 您不能使用泛型创建数组。使用或代替。 这是正式的解释。
问题内容: 我正在尝试做这样的事情: myObject是一个类。我收到此错误:-通用数组创建(箭头指向new。) 问题答案: 你不能有泛型类的数组。Java根本不支持它。 你应该考虑使用集合而不是数组。例如, 另一个“解决方法”是创建这样的辅助类 然后创建一个数组MyObjectArrayList。 这是一篇很好的文章,说明了为什么在语言中不允许这样做。本文提供了以下示例,说明如果允许的话可能发生
问题内容: 考虑以下嵌套类。 问题答案: 您可以像这样声明一个对象数组。 并实例化它们,您可以在类中执行类似的操作。
问题内容: 我想使用simpleJdbcInsert类和executeBatch方法 http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jdbc/core/simple/SimpleJdbcInsert.html 所以我需要传递一个as参数数组。如何创建这样的数组?我试过的是 错误:无法创建通用数组 A
问题内容: 该代码似乎不起作用,它将抛出异常: java.lang.ClassCastException:[Ljava.lang.Object; 无法转换为… 有人可以告诉我如何创建具有通用类型的数组吗?谢谢。 问题答案: 您不能:必须将类作为参数传递:
我想使用简单的Jdbc插入类和执行批处理方法 http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/jdbc/core/simple/SimpleJdbcInsert.html 所以我需要传递一个< code>Map数组 这是错误:无法创建 Map 的通用数组