Referring to a superclass object with a superclass reference is straightforward; Referring to a subclass object with a subclass reference is straightforward; Referring to a subclass with a superclass reference is safe; Referring to a superclass with a subclass reference is a syntax error.
你可以用List<? extends IModel> 或者 List<? super Node>但你要明确你的目的是什么
Node是IModel 的子类 我举个例子
Node node =new Node()
IModel imodel=(IModel )node;
这样是可以的~~
但是List<Node> list1 和 List<IModel>list2 之间是转换不了的因为 list1 和 list2 没有任何继承关系~
List<Node> modelList=new ArrayList<Node>();
List<IModel> imodel=new ArrayList<IModel>();这是两个List,存放的是对两个类对象的引用,虽然存放的类型存在继承关系,但对List而言不是存在继承关系的。那也不不存在向上转型或向下转型的引用了。
Referring to a subclass object with a subclass reference is straightforward;
Referring to a subclass with a superclass reference is safe;
Referring to a superclass with a subclass reference is a syntax error.
List<IModel> 是由持久层public List<IModel> getModelList(String className)方法得到的,
我需要的是List<Node>现在我需要把List<IModel>强制转换为List<Node>
有一个办法是:for(IModel model:modelList){
Node node = (Node)model;
nodeList.add(node);
}
这样可以得到nodeList,但是我觉得这样很不好,太浪费资源。我觉得14楼的说法可行。
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{
}
打出GG,思密达