反射+泛型问题

rocky225 2013-02-01 04:54:21
我想创建List<T> l = new List<T>();
只有在new的时候才知道T的类型.
...全文
262 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
CharlotteKong 2013-02-04
  • 打赏
  • 举报
回复
用通配符?来表示未知类型。如List<?>就声明了List中包含的元素类型是未知的。
  • 打赏
  • 举报
回复
泛型是1.5之后才有的,以前没有泛型的时候,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,你转换的时候对实际参数的类型是要知道的。如果你写错了类型,编译器一般不提示错误,等运行时候才会出错。 泛型的出现,就是你编译的时候就提示你出错。 理解Java泛型最简单的方法是把它看成一种便捷语法,能节省你某些Java类型转换上的操作:

	List<Apple> box = ...;
	Apple apple = box.get(0);
上面的代码自身已表达的很清楚:box是一个装有Apple对象的List。get方法返回一个Apple对象实例,这个过程不需要进行类型转换。没有泛型,上面的代码需要写成这样:

	List box = ...;
	Apple apple = (Apple) box.get(0);
很明显,泛型的主要好处就是让编译器保留参数的类型信息,执行类型检查,执行类型转换操作:编译器保证了这些类型转换的绝对无误。
rocky225 2013-02-04
  • 打赏
  • 举报
回复
引用 4 楼 hucp2007 的回复:
啥子意思,木有搞懂。。。
List<T> l = new List<T>();这里面T的类型只有在运行的时候才能够确定,可能是int,string或者自己定义的类
rocky225 2013-02-04
  • 打赏
  • 举报
回复
引用 3 楼 trocp 的回复:
List<T> l = new ArrayList<T>(); 或者 List<T> l = new LinkedList<T>();
我想说的是,T这个类型并非是写死的,而是动态产生.
expectbird 2013-02-04
  • 打赏
  • 举报
回复
package test; import java.util.ArrayList; import java.util.List; public class JVMTest<T> { /** * @param args */ public List<T> test(String className) throws InstantiationException, IllegalAccessException, ClassNotFoundException{ List<T> l = new ArrayList<T>(); return l; } }
nella135 2013-02-04
  • 打赏
  • 举报
回复
List<?> l = new ArrayList<?>();
healer_kx 2013-02-03
  • 打赏
  • 举报
回复
Java的泛型基本就是弱智的产物。。。
Candylibin 2013-02-03
  • 打赏
  • 举报
回复
List<T> list = new ArrayList<T>();
笑莫问 2013-02-01
  • 打赏
  • 举报
回复
啥子意思,木有搞懂。。。
oO临时工Oo 2013-02-01
  • 打赏
  • 举报
回复
List<T> l = new ArrayList<T>(); 或者 List<T> l = new LinkedList<T>();
a12939026 2013-02-01
  • 打赏
  • 举报
回复
你想说啥。。 而且这个LIST不是java.util.list吧。 不然还不能实例化。。
七神之光 2013-02-01
  • 打赏
  • 举报
回复
你这想法和反射基本没啥子关系啊。。。没有反射能操作你的局部变量。。。类的泛型字段的泛型可以通过反射得到。

62,614

社区成员

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

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