有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么Java中的数组不能使用类型擦除?

我注意到我们无法在Java中创建泛型类型的数组,如下所示:

public class ExampleClass<G> {
  private G[] genericArray = new G[arraySize];
}

我已经读到,这是由于Java处理泛型的方式,使用类型擦除。我对类型擦除的理解是,泛型只是被最特定的超类容器所取代——因此,如果我们不提供绑定,那么G的每个实例都会被Object所取代

为什么不能用数组来创建Object类型的数组


共 (1) 个答案

  1. # 1 楼答案

    如果这是允许的,并且G被擦除为Object,那么以下操作将不起作用:

    ExampleClass<String> foo = new ExampleClass<>();
    String[] array = foo.genericArray;
    

    因为genericArray将是Object[],而不是String[]