class Fruit{
}class Apple extends Fruit{
}public class Holder<T> {
T[] holder;
public void makeHolder(int size) {
holder = (T[])new Object[size];
holder = new T[size];
}
public static void main(String[] args) {
Holder<? extends Fruit> holder = new Holder<Apple>();
}
}在Holder泛型类中,为什么holder = new T[size]不能编译通过?我个人理解是T类型被擦除为Object,但是这没问题啊
在main函数中,编译器是如何知道holder的动态类型是否符合要求的?
}class Apple extends Fruit{
}public class Holder<T> {
T[] holder;
public void makeHolder(int size) {
holder = (T[])new Object[size];
holder = new T[size];
}
public static void main(String[] args) {
Holder<? extends Fruit> holder = new Holder<Apple>();
}
}在Holder泛型类中,为什么holder = new T[size]不能编译通过?我个人理解是T类型被擦除为Object,但是这没问题啊
在main函数中,编译器是如何知道holder的动态类型是否符合要求的?
虽然是泛型但是在初始化是必须要有明确的类型,不然怎么创建内存来保存该类型呢?所以holder = new T[size]是不能编译的。
https://www.zhihu.com/question/20928981