gpt4 book ai didi

Java :How Generic Erasure Works

转载 作者:行者123 更新时间:2023-12-01 16:35:16 28 4
gpt4 key购买 nike

Scenario A.java-----------after erasure-------->M.class

Scenario B.java-----------after erasure-------->M.class

那为什么A是非法的,B是合法的,因为它们删除后的M几乎相同。

删除前的场景A:

 class ArrayList<V> {
private V[] backingArray;
public ArrayList() {
backingArray = new V[DEFAULT_SIZE]; // illegal
}
}

删除后的场景A:

 class ArrayList<V> {   
private Object[] backingArray;
public ArrayList() {
backingArray = new Object[DEFAULT_SIZE]; // this is not useful
}
}

其实Object[Default_Size]很有用~删除前场景B:

class ArrayList<V> {
private V[] backingArray;
public ArrayList() {
backingArray = (V[]) new Object[DEFAULT_SIZE];
}
}

删除后的场景B:

class ArrayList<V> {
private Object[] backingArray;
public ArrayList() {
backingArray = (Object[]) new Object[DEFAULT_SIZE];
}
}

最佳答案

场景 A 非法的原因是 Java 的协变数组不是通过删除实现的。这:

Object[] foo = new String[4];
foo[0] = new Object();

将筹集ArrayStoreException在运行时,因为 foo 引用了一个知道的数组实例,它是 String[] (即使它是通过变量 foo,其编译时类型为 Object[])。所以这个:

new V[4]

是非法的,因为运行时不会知道要创建什么类型的数组实例。

关于Java :How Generic Erasure Works,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9855387/

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