浏览 1601 次
|
锁定老贴子 主题:请帮忙看一下这几个关于泛型的问题
该帖已经被评为新手帖
|
|
|---|---|
| 作者 | 正文 |
|
时间:2007-03-10
1.普通集合类是不是可以直接转换为泛型的集合类? 好象是可以,因为以下代码可以正常运行
public static void main(String[] args) {
List<String> ls = new ArrayList();
ls.add("str1");
ls.add("str2");
ls.add("str3");
for (String string : ls) {
System.out.println(string);
}
}
2.以下代码中public后的那个<T>作何解释,好象去掉也是可以运行的。
public <T> List<T> getAll(Class<T> entityClass) {
return getHibernateTemplate().loadAll(entityClass);
}
3.为什么ls不过赋给lo,String是Object的子类啊? List<Object> lo = new ArrayList<Object>(); List<String> ls = new ArrayList<String>(); lo = ls;//<---此外语法编译不过 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
时间:2007-03-11
问题1
我感觉是Object 和 String 转换的问题 首先你用了for (String string : ls) {...} 当然没问题 可是如果 String str = list.get(index); 方式呢 ? 传统代码 :
public static void main(String[] args) {
List ls = new ArrayList();
ls.add("str1");
ls.add("str2");
ls.add("str3");
String st= (String)list.get(1); //此处必须强制转换.
System.out.println(st);
}
但是用了泛型之后呢...
public static void main(String[] args) {
List<String> ls = new ArrayList();
ls.add("str1");
ls.add("str2");
ls.add("str3");
String st= list.get(1); //这里就不用强制转换了.
System.out.println(st);
}
问题2 <T> 只不过是个类型参数. 怎么说呢,类似于方法中的 引数,只是抽象的定义. 传什么就是什么. 如List<T>传String后就变为 List<String>. 关注 问题3 ......! |
|
| 返回顶楼 | |
|
时间:2007-04-05
问题 3:
泛型不是协变的(covariant),数组是协变的。 |
|
| 返回顶楼 | |





