这种 static <T> Collection<T> select(Class<T> cls,ResultSet rs) {
Collection<T> result = new ArrayList<T>();
while(rs.next()){
T item = getItem(cls, rs);
result.add(item);
}
return result;
}和这种有什么区别,上边的好处在那里  Collection select(Class cls,ResultSet rs) {
Collection result = new ArrayList();
while(rs.next()){
Object item = getItem(cls, rs);
result.add(item);
}
return result;
}

解决方案 »

  1.   

    使用了泛型后,你放进Collection里的东西,取出来还是你定义的类型,
    没有使用,放进去是你定义的类型,取出来都是Object类型
      

  2.   

    算是防止你装入别的不是<T>类型的东西. 导致以后可能会出现的 ClassCastException吧.            只要你一次确定T是什么类型了. 那这个就只能装那种了.
      

  3.   

    第一  编译期确定了容器内的元素类型
    第二  取出元素后不用在强制装换了 因为你知道里面是什么了  准确的说是JVM知道里面是什么
      

  4.   

    如果用泛型定义某个实体bean ,该bean就可以接受任何你想放入的对象,并不用强制类型转化。
      

  5.   

    小提醒,不关jvm的事,呵呵。
    还是需要强制转化的,不过是编译器给你增加了处理语句而已。
      

  6.   

    一个简单的例子,
    Collection<String> result = new ArrayList<String>();
    这时,你只能给result 中存放String类实例。如果你存放其他类就会报错。这个好像叫类型安全吧
    而你取出来时,String s = result.remove();就可以类,不必强制转换如String s = (String)result.remove()(省下强制转换的资源)如果你没有泛化
    Collection result = new ArrayList();
    这时,你可以给result存放任何Object对象,比如可以放一个Stirng对象,同时再放一个HashMap对象,取出来的时候你将不知道你取到的是什么类对象,(够你判断好久了)。
    而且你不能使用String s = result.remove(); 必须使用String s = (String)result.remove(),或HashMap m = (HashMap)result.remove()(真够累的!)