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

时间:2018-06-19 22:07:56

标签: java type-erasure

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

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

我已经读到这是由于Java使用类型擦除来处理泛型的方式所致。我对类型擦除的理解是,泛型仅被最特定的超类容器替换-因此,如果我们不提供绑定,则G的每个实例都将被Object替换。

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

1 个答案:

答案 0 :(得分:4)

如果允许这样做,并且将G擦除为Object,则以下操作将无效:

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

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