当前位置: 首页 > 面试题库 >

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

狄德泽
2023-03-14
问题内容

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

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: 我应该提到的是,参数化类型必须是在同AB。因此,通过<E>对内部类是不可能的,因为它创造E#2和叶AE#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 的通用数组