2 old ripper old_Ripper 于 2016.09.21 09:06 提问

在java中 Arrays的asList方法 为什么放入一个定义的泛型类的子类会报错? 1C

图片说明

8个回答

quasimodo_es
quasimodo_es   2016.09.21 16:49

java的泛型是“伪泛型”,主要是为了类型安全检查,避免运行时 cast 异常;
在编译过程中,泛型都会被擦除掉,比如List ,最后还是List;

对于你的程序出现错误的原因是,对于泛型参数,
如果是单个(Light),那么泛型类型就是当前这个参数的类型Light;
如果是2个(Light,Heavy),那么泛型类型就是他们共同的父类型Snow;
如果是多个,那么泛型类型就一直会找到 Object, 称之为最小共同原始类型;

dwangc
dwangc   2016.09.21 09:32

你都不把报错信息放上来?

Megustas_JJC
Megustas_JJC   2016.09.21 10:04

Array.asList()方法接受一个数组或者是一个用逗号分隔的元素列表(使用可变参数),并将其转成一个List对象。因此报错,详细的内容可以下看下Thinking in Java第11章

old_Ripper
old_Ripper   2016.09.21 09:07

如题,为什么 为什么 只加入一个子类就会报错,如果加入多个就不会?

Megustas_JJC
Megustas_JJC 看我下面的回复
大约一年之前 回复
qq592304796
qq592304796   2016.09.21 09:44
    List<snow> list1  = Arrays.asList(new snow());
    List<snow> list2  = Arrays.asList(new light());
    List<snow> list3  = Arrays.asList(new light(), new snow());

    List<snow> list1  = Arrays.asList(new snow());也会报错

    asList需要传入一个动态参数,即一个泛型的数组
zy_281870667
zy_281870667   Rxr 2016.09.21 09:45

泛型类的子类 是什么意思?

泛型就是泛型,泛型是没有什么继承不继承的关系

Arrays.adList(T... a),参数应该放入一个数组
T... a是数组的意思,类似Object[] objs的意思。只不过T... a这样形式,你可以不放入参数(Object[]的方式就必须的放入参数)

sd_windy
sd_windy   2016.09.21 10:26

图片说明
这是我的运行结果,不知道是不是IDE的问题,后两种都应该出错才对

u012966947
u012966947   2016.09.21 17:19

理解编译和运行时,字节码的不同,你就明白了。

Csdn user default icon
上传中...
上传图片
插入图片