List<Node> modelList = (List<Node>)List<IModel>;
其中Node是IModel的子类,为什么IModel的集合不能强转为Node的集合呀,请各位大侠帮忙。
------解决方案--------------------
都说Node是IModel的子类,怎么能子类的引用指向父类的对象。。。
------解决方案--------------------
复习一下泛型吧,List<Node>和List<IModel>是 List的子类,但是List<Node>和List<IModel>是没有继承关系的。
------解决方案--------------------
子类型对象可以放在父类型引用,反之不可以
------解决方案--------------------
楼主怎么想我猜到了一点
Node是IModel 的子类 我举个例子
Node node =new Node()
IModel imodel=(IModel )node;
这样是可以的~~
但是List<Node> list1 和 List<IModel>list2 之间是转换不了的因为 list1 和 list2 没有任何继承关系~
------解决方案--------------------
反之是必须强制转换的
------解决方案--------------------
------解决方案--------------------
- Java code
List<Node> modelList=new ArrayList<Node>();List<IModel> imodel=new ArrayList<IModel>();
------解决方案--------------------
应用。
------解决方案--------------------
------解决方案--------------------
你这个也没有心要强转,只要父类中有子类方法的声明,就可以直接用的。多态吗
------解决方案--------------------
------解决方案--------------------
你可以用List<? extends IModel> 或者 List<? super Node>但你要明确你的目的是什么
------解决方案--------------------
父子关系没搞清楚
------解决方案--------------------
- Java code
package generics;import java.util.ArrayList;import java.util.List;public class Generics extends GG{ int k; public Generics(int k) { // TODO Auto-generated constructor stub this.k = k; } public static List<? extends GG> listCopy(List<GG> src){ return src; } @SuppressWarnings({ "unchecked" }) public static void main(String[] args) { List<GG> list = new ArrayList<GG>(); list.add(new Generics(1)); list.add(new Generics(2)); list.add(new Generics(3)); List<Generics> ll = (List<Generics>) listCopy(list); System.out.println(ll); List<Generics> lll = (List<Generics>)(List<? extends GG>)list; System.out.println(lll); } public String toString(){ return k+""; }}class GG{ }