JAVA list中如何将类型为子类的list引用赋值给类型为父类的list引用?

作者&投稿:地曼 (若有异议请与网页底部的电邮联系)
java List的<>中为什么不支持将子类对象传递给父类参数?~

看了之前的回答,没有一个有说服力或者说答在点子上的,当然,没有恶意,只是觉得没有满意的答案。我觉得为了让初学者不被误导,答案尽可能的专业些,毕竟不止楼主再问,还有很多人在查。
这应该涉及到了java泛型擦除的概念。因为java中的泛型属于伪泛型,编译器编译后的字节码文件(.class)将List cList变为了List cList,这就是泛型擦除的过程,那么List cList默认的泛型类型就是Object,对它来说插入ChildTest类型完全可以,但是在调用temp2方法中为List类型的引用变量赋值就有点说不过去了。
还有一个经典的泛型擦除的证明案例(结果返回true):
Class c1 = new ArrayList().getClass();
Class c2 = new ArrayList().getClass();
System.out.println(c1 == c2);
或许这个例子你似曾相识,在初学的过程中好像有接触过,其实那是老师或者课本的不负责造成的,学习任何事物都是要有5W2H的思维方式,学这个案例有什么用?它在实际开发中能给我带来什么帮助?其实在传递子类泛型的过程中你或许才能明白,这一点尤为重要。

用super关键字啊
比如你父类又一个int的实例变量i
在子类里用
super.i=10;
这样就行

List<Animal>和List<Dog>不是一个类型,也不是继承关系。
这里的泛型应该写作
List<? extends Animal> list = new ArrayList<Dog> ();

可以强制转换,但是会出问题,编译的时候没问题,但是使用的时候,会出问题

强制转换就行了(List<Animal>)dog


新疆维吾尔自治区15145323223: JAVA list中如何将类型为子类的list引用赋值给类型为父类的list引用? -
潭德丁缓: List和List不是一个类型,也不是继承关系.这里的泛型应该写作 List list = new ArrayList ();

新疆维吾尔自治区15145323223: arraylist - java中List怎么转为ArrayList -
潭德丁缓: /* List是个接口,是所有list集合的老大,如果你想把大哥强行转换成小弟: 有两种情况:1.可行:但是需要你主观上一定知道集合类型List<String> list=new ArrayList<>();//声明用的是大哥,实际对象是小弟ArraList;ArrayList<String> ...

新疆维吾尔自治区15145323223: java 我已经规定list的类型 怎么样把String类型的数据加进去 -
潭德丁缓: 你list定了什么类型了.就把String转成什么类型.这样就可以放进去了.如果你list要放很类型那list中就定Object.那不管什么类型不能转就可以放进去了

新疆维吾尔自治区15145323223: java split List<>问题 -
潭德丁缓: java List是个集合接口,只要是集合类接口都会有个“迭代子”( Iterator ),利用这个迭代子,就可以对list内存的一组对象进行操作. 所有要想操作这个list内存的东西,就首先要得到此迭代子的实例:Iterator it=l.iterator(); 用add()方法即可...

新疆维吾尔自治区15145323223: java:集合之间的强制类型转换是如何实现的 ,最好举个例子 -
潭德丁缓: jdk中有个集合的帮助类Collections有些方法可能是你想要的,Arrays有个asList可以将一个数组转成List集合.自己多查查JDK会对你有帮助的

新疆维吾尔自治区15145323223: Java中ArrayList的向上转型问题(父类与子类的关系),求大神解决 -
潭德丁缓: 这个是java里面典型的一个问题:FatherClass和ChildClass是父子类关系,但ArrayList 和 ArrayList不是父子类关系,ArrayList,vector,list,linkedlist,hashmap,hashset等都是这个原则.这些泛型类都是不存在继承关系的!记住这个原则就行了

新疆维吾尔自治区15145323223: java - List<实体>怎么转换成List<Object> -
潭德丁缓: 实体类型如果为数组的话,可以直接通过list的add方法进行添加转换,举例:list list = new arraylist();//定义一个数组类型的list对象 string[] entity = new string[10];//创建一个要实体化的数组对象 entity[0] = "1232";//给数组赋值 list.add(entity );给list对象赋值,这样就完成了对象的转换 可以获取到list的值:list.get(0),结果就是entity 对象.备注:因为object类型是任何对象类型的父类,所以不需要强制转换即可完成添加.

新疆维吾尔自治区15145323223: java 中 List<Object []>的用法 -
潭德丁缓: list中可以添加任何对象,例如:class Person{.} 上面定义了一个Person类,下面看好如何使用List Person p1=new Person(); Person p2=new Person(); List list=new ArrayList(); list.add(p1); list.add(p2);//这里是将对象加入到list中 for(int i=0;i 补充:Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言.Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群.

新疆维吾尔自治区15145323223: 如何将List集合转换成String的数组? -
潭德丁缓: 将List集合转换成String的数组的方法如下: 输入代码: [java] view plain copy List<String> list = new ArrayList<String>(); list.add("a1"); list.add("a2"); String[] toBeStored = list.toArray(new String[list.size()]); for(String s : toBeStored) { System.out....

新疆维吾尔自治区15145323223: java arraylist转换为string类型 -
潭德丁缓: String[] strList = list.toArray(new String[0]);

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网