简述
在泛型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的泛型设计,然后再来看本例,会有收获!
========================================================================