奇怪了!罕见的数据类型转换的问题
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{
}