浏览 5713 次
锁定老帖子 主题:泛型中,Class<T>简明获得
精华帖 (0) :: 良好帖 (0) :: 新手帖 (3) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-31
在泛型Dao设计中,常常需要得到参数T的类型,以便实例化,或传给其他框架。 实际上,参数T的类型的获得非常简单。不像网上传言,无法获得,至少java 6中很简单(在5中没测试过) 附 spring允许JavaBean的属性是泛型。 例: 假定一个JavaBean中有一个属性: private Class<T> pojoClass //注意当然有setter属性,这里略。 则在spring的配置中,相关属性可如下写 <property name=" pojoClass " value="model.User"/> 其中:model.User是类名。 ===============================正文=============================================== 精要: [size=medium] [b][color=darkred]1 类型名字符串 ——> Class<T> 例 Class<T> cls=(Class<T>) Class.forName(“className”); 2 Class<T>——>类型名字符串 例 cls.getName(); //其中 cls类型为Class<T>[/color][/b][/size] 完整测试样例: 这是一个简单的工厂泛型。 在工厂构造函数中,增加一个字符串参数------ T的类型名。最大好处时,在spring注入时,没有必要的担心spring不忠实执行。 本例没有展示”Class<T>——>类型名字符串”, 在调试窗口,自行验证吧。 package jap1; public class TestFactory<T> { private Class <T> cls; public String testabc=""; //---------------注意构造函数传的是一个类型名------------------------ public TestFactory(String clsName) throws ClassNotFoundException{ cls=(Class<T>) Class.forName(clsName); } //---------生成了cls的实例-------------------------------------------- //---------汗, 由类型名一样能生成cls的实例,如:----------------------- //---------Class.forName(clsName).newInstance()----------------------- //-------------------------------------------------------------------- public T getInstance() throws InstantiationException, IllegalAccessException{ return cls.newInstance(); } public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException { TestFactory tf=new TestFactory(String.class.getName().toString()); String aa=(String)tf.getInstance(); System.out.println(aa); } } 注:如有不太明白者,建议先看Dao的泛型设计,然后再来看本例,会有收获! ======================================================================== 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |