java - 包含泛型成员的类数组的问题

标签 java generics

当我编译这段代码时:

public class OuterClass<T>
{
    class InnerClass
    {
       T temp;
    }
    
    private InnerClass[] theArray;
    
    public OuterClass(int size){
       this.theArray = new InnerClass[size];
  }
}
我收到此错误:
OuterClass.java:10: error: generic array creation
      this.theArray = new InnerClass[size];
所以我的 问题 #1 是:为什么创建一个 InnerClass 数组有问题?毕竟,它是一个对象数组,而不是泛型类型。
我的 问题 #2 是:为什么修改代码(见下文)可以解决问题?
public class OuterClass<T>
{
    class InnerClass<U>  //changed this line
    {
       T temp;
    }
    
    private InnerClass<T>[] theArray;  //changed this line
    
    public OuterClass(int size){
       this.theArray = new InnerClass[size];
  }
}

最佳答案

想想你在这里实例化的是什么类型的数组。在第一种情况下,它是一个

OuterClass<T>.InnerClass[]
请注意,此类型是参数化类型( <T> )和 you are not allowed to create arrays of parameterised types .
在第二种情况下,由于 InnerClass 的声明被参数化,名称“InnerClass”实际上指的是raw type (因为您没有指定类型参数),并且因为它是原始类型,所以您创建的数组类型变为:
OuterClass.InnerClass[]
请注意 OuterClass也会丢失其类型参数,因为您使用的是原始类型。这现在不是参数化类型,因此您可以创建这样的数组。

关于java - 包含泛型成员的类数组的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66270872/

相关文章:

java - BouncyCaSTLe Java API 和 OpenSSL 生成的 ECDH key 不同

java - 为什么要为 Collection 类引入泛型?

typescript 将类型 `typeof Foo` 转换为 `Foo`

java - 迭代 Guava Cache 中的值会丢失数据

java - vector 和数组列表哪一个更好用?

java - 如何使用 cellEditor 将 validator (具有禁用条件)添加到 primefaces 数据表?

java - 反序列化通用(但可序列化)类型

Java 泛型有声明

java - 我的 History() 方法面临问题,如何根据最旧的更改进行排序?

java - CLOB 不保存在 ORACLE 上(使用 JPA、eclipselink)