gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 20:14:40 25 4
gpt4 key购买 nike

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

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离开AE#1 .

最佳答案

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

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

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

最可行的解决方案似乎是使用 Object[]并明确转换。如果你想提高类型安全性,你当然可以使用 ArrayList<B> ,内部使用 Object[] ,也是!

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

关于java - 内部类的通用数组创建编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10671723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com