日期:2014-05-20  浏览次数:20626 次

奇怪了!罕见的数据类型转换的问题
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<Node>和List<IModel>是 List的子类,但是List<Node>和List<IModel>是没有继承关系的。

------解决方案--------------------
你这个也没有心要强转,只要父类中有子类方法的声明,就可以直接用的。多态吗

------解决方案--------------------
探讨
List<Node> modelList = (List<Node>)List<IModel>;
其中Node是IModel的子类,为什么IModel的集合不能强转为Node的集合呀,请各位大侠帮忙。

------解决方案--------------------
你可以用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{
    
}