浏览 3287 次
锁定老帖子 主题:请帮忙看一下这几个关于泛型的问题
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-03-10
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;//<---此外语法编译不过 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间: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),数组是协变的。 |
|
返回顶楼 | |