java 泛型 类型擦除问题 泛型java数组,转型 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 楼主的问题可以简化为以下代码A和B的区别import java.lang.reflect.Array;public class Demo { public static void main(String[] args) { Integer[] arrA=(Integer[]) new Object[10]; //A Integer[] arrB=(Integer[]) Array.newInstance(Integer.class, 10); //B }}关于A:人是动物,但动物不一定是人关于B:人当然是人,人当然也是动物!虽然Array.newInstance(*,*)方法返回Object类型的对象,但这个对象实际就是Integer[]类型数组,虽然再转化为Integer[]数组肯定没问题!这点可以参考Array.newInstance(*,*)方法说明如下:希望有帮助 但是在array = (T[])Array.newInstance(type, sz); type的类型T也是被擦除了,也就不知道具体是什么类型了 我理解的是类型擦除在两个例子都是起作用的,正因为如此,第一个例子是自己new Object[]数组,后期将它赋值给Integer数组,肯定是不行的,而至于get的时候不报错,正是因为在类型擦除后会经过一次类型的恢复(jvm有这个能力)。实际上通过查看字节码,报错是因为checkcast #20; //class "[Ljava/lang/Integer;" 这个指令去做了类型检查,发现array变量并不是一个Interger[]。例子二中array = (T[])Array.newInstance(type, sz);这里构造的是一个Integer[]的数组,和例子一种的Object[],不是一个类型。 请问如何知道例子二中array = (T[])Array.newInstance(type, sz);这里构造的是一个Integer[]的数组? 这里不是类型擦出了么 请问如何知道例子二中array = (T[])Array.newInstance(type, sz);这里构造的是一个Integer[]的数组? 这里不是类型擦出了么擦除只是说Class<T>这里的接受参数变成Class,并不是真的把你的类型抹掉,你代码传入的确确实实是Integer.class,所以会构造出一个Interger数组,可以.getClass打印下看看构造出来的是什么类型。 脚本控制播放音频 session过期事件 一个笔试题 jacob调用DLL里面的方法 关于jframe中paint方法 重绘机制 参数传递 执行java界面出不来 初级问题! 了看见了房 新手求大神说下数组问题。把数组中出现奇数次的数输出 jna Java与c++ 100以内素数和问题
import java.lang.reflect.Array;
public class Demo {
public static void main(String[] args)
{
Integer[] arrA=(Integer[]) new Object[10]; //A
Integer[] arrB=(Integer[]) Array.newInstance(Integer.class, 10); //B
}
}
关于A:人是动物,但动物不一定是人
关于B:人当然是人,人当然也是动物!虽然Array.newInstance(*,*)方法返回Object类型的对象,但这个对象实际就是
Integer[]类型数组,虽然再转化为Integer[]数组肯定没问题!这点可以参考Array.newInstance(*,*)方法说明
如下:希望有帮助
例子二中array = (T[])Array.newInstance(type, sz);这里构造的是一个Integer[]的数组,和例子一种的Object[],不是一个类型。
擦除只是说Class<T>这里的接受参数变成Class,并不是真的把你的类型抹掉,你代码传入的确确实实是Integer.class,所以会构造出一个Interger数组,可以.getClass打印下看看构造出来的是什么类型。