java泛型

wowFreshMan 2009-11-06 12:02:03

import java.util.*;
class Tiger{}
public class P378 {


public static void main(String[] args) {
//为什么可以这么做
List<String> ls=new Test1().makeArrayList(new Tiger());
}

}

class Test1<T>{
public List<T> makeArrayList(T t){
List<T> list=new ArrayList<T>();
list.add(t);
return list;
}
}

List<String> ls=new Test1().makeArrayList(new Tiger());这句为什么编译器不会报错
然而如果单独使用List<String> l=new ArrayList<T>();这样会报错 (其中T为泛型占位符)
希望大虾们帮忙解决


...全文
142 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
wifewifewife 2009-11-06
  • 打赏
  • 举报
回复
明白了..
临碣 2009-11-06
  • 打赏
  • 举报
回复
java其实没有泛型,凑活用好了.
对虚拟机而言,无非就是强制转换.这是为了兼容之前的代码.

所以List<String>会对每一个加进来的对象做(String)的强转.你后面写一个<T>进来.又不能保证是String,会被认为强转不能保证成功的.所以就报错了呗.
dickli1986 2009-11-06
  • 打赏
  • 举报
回复
List <String> l=new ArrayList <String>();
这样就不报错了,两端泛型不匹配
gzbtiantian 2009-11-06
  • 打赏
  • 举报
回复
1楼说的对,要一致
baobaohehe 2009-11-06
  • 打赏
  • 举报
回复
泛型这种专用容器是在java5.0版本才支持的。你可以查看一下你的java版本
zcl198715 2009-11-06
  • 打赏
  • 举报
回复
你肯定是受c++_里的泛型影响,在java中是不能这么用的
你应该好好的看下java编程思想里的泛型的章节。
LazyCat2222 2009-11-06
  • 打赏
  • 举报
回复
List <String> l=new ArrayList <T>(); 在前面声明的就是一个String类型的。List<String>,那就说这个集合里面就只能存放String类型的数据。(List<String> l = new ArrayList<String>())

new Test1().makeArrayList(new Tiger()); 这里返回的就是一个List<String> 的类型。所以不会报错了。。
List <String> ls=new Test1().makeArrayList(new Tiger());
}

用泛型能提高安全性 和效率。。

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧