如题,为什么 为什么 只加入一个子类就会报错,如果加入多个就不会?
你都不把报错信息放上来?
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需要传入一个动态参数,即一个泛型的数组
泛型类的子类 是什么意思?
泛型就是泛型,泛型是没有什么继承不继承的关系
Arrays.adList(T... a),参数应该放入一个数组
T... a是数组的意思,类似Object[] objs的意思。只不过T... a这样形式,你可以不放入参数(Object[]的方式就必须的放入参数)
Array.asList()方法接受一个数组或者是一个用逗号分隔的元素列表(使用可变参数),并将其转成一个List对象。因此报错,详细的内容可以下看下Thinking in Java第11章
这是我的运行结果,不知道是不是IDE的问题,后两种都应该出错才对
java的泛型是“伪泛型”,主要是为了类型安全检查,避免运行时 cast 异常;
在编译过程中,泛型都会被擦除掉,比如List ,最后还是List;
对于你的程序出现错误的原因是,对于泛型参数,
如果是单个(Light),那么泛型类型就是当前这个参数的类型Light;
如果是2个(Light,Heavy),那么泛型类型就是他们共同的父类型Snow;
如果是多个,那么泛型类型就一直会找到 Object, 称之为最小共同原始类型;
理解编译和运行时,字节码的不同,你就明白了。