论坛首页 入门技术论坛

请帮忙看一下这几个关于泛型的问题

浏览 3287 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-03-10  
OO
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;//<---此外语法编译不过	



  
 
   发表时间: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 ......!
0 请登录后投票
   发表时间:2007-04-05  
问题 3:
泛型不是协变的(covariant),数组是协变的。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics