我自己写的一个JAVA泛型问题

专打小盆友 发布于 2011/10/28 11:09
阅读 460
收藏 0
public class Tree<T> {
private T self;
private List<T> childs;
public T getSelf() {
return self;
}
public void setSelf(T self) {
this.self = self;
}
public List<T> getChilds() {
return childs;
}
public void setChilds(List<T> childs) {
this.childs = childs;
}
} 
在一个DAO实现里面用这个泛型类
public List<Tree> buildRoleTreeF(List<Role> list) {
List<Tree> Trees=new ArrayList<Tree>();
List<Role> roots=findAllRoots(list);
if(roots.size()>0){
for(Role root:roots){
Tree<Role> Tree=new Tree<Role>();
Tree.setSelf(root);
List<Role> childs=findAllChilds(root,list);
Tree.setChilds(childs);
Trees.add(Tree);
}
return Trees;
}else{
return null;
}
}
List<Role> list=bean.getList();
List<Tree> roleTrees=bean.buildRoleTreeF(list);
for(Tree rt:roleTrees){
System.out.println(rt.getSelf());
} 
为什么rt.getSelf取出来的时候还是要转型呢,泛型存进去的时候指定的类型不是不用转了么?
加载中
0
红薯
红薯
当然要转啦,因为你写的是 for(Tree rt ....) 应该改为 for(Tree<T> rt...) 其中 T 就是你 Tree 中的对象类型
专打小盆友
专打小盆友
@红薯 : 啊啊啊,好像可以不用转的,在我在一个JEE学习的群里提问,人家看到哪里问题了就是不说~~~
红薯
红薯
@胡歌 : 必须要转的
专打小盆友
专打小盆友
红薯,我前段时间看书的时候好像说泛型不用转的捏,比如像arrrylist存进去一个指定了类型的对象时候取出来就不用转啊
0
DustinYoung
DustinYoung
List<Tree<Role>>
专打小盆友
专打小盆友
红薯老大的解释我明白了,谢谢DONG DONG!
DustinYoung
DustinYoung
@胡歌 : 你的泛型写的不完整,List你用了,但是Tree没用,你定义了泛型但是要用才行啊...
专打小盆友
专打小盆友
DONG DONG能说具体点么,我学JEE没多久,真没看出来哪里出问题了
0
红薯
红薯
你写成 Tree<Role> 就不用转了
0
专打小盆友
专打小盆友

我改成这样了还是要转捏

public List<Tree<Role>> buildRoleTreeF(List<Role> list) {

List<Tree<Role>> Trees=new ArrayList<Tree<Role>>();

List<Role> roots=findAllRoots(list);

if(roots.size()>0){

for(Role root:roots){

Tree<Role> Tree=new Tree<Role>();

Tree.setSelf(root);

List<Role> childs=findAllChilds(root,list);

Tree.setChilds(childs);

Trees.add(Tree);

}

return Trees;

}else{

return null;

}

}

这里取:

List<Role> list=bean.getList();

List<Tree<Role>> roleTrees=bean.buildRoleTreeF(list);

for(Tree rt:roleTrees){

System.out.println(rt.getSelf());

}

 

0
无鸯
无鸯

 

List<Role> list=bean.getList();

List<Tree<Role>> roleTrees=bean.buildRoleTreeF(list);

for(Tree<Role> rt:roleTrees){

System.out.println(rt.getSelf());

}

专打小盆友
专打小盆友
谢谢咯,明白 了!!!谢谢大家了,呵呵
0
专打小盆友
专打小盆友
明白了,谢谢红薯老大,还有DONG!!!!!!
返回顶部
顶部