简述
在泛型Dao设计中,常常需要得到参数T的类型,以便实例化,或传给其他框架。
实际上,参数T的类型的获得非常简单。不像网上传言,无法获得,至少java 6中很简单(在5中没测试过)
[b] [color=blue] [size=medium]
附
[/size] [/color] [/b]
spring允许JavaBean的属性是泛型。
例:
[color=brown][b]假定[/b][/color]一个JavaBean中有一个属性:
[color=brown][b]则[/b][/color]在spring的配置中,相关属性可如下写
其中:model.User是类名。
===============================[b][size=medium][color=blue]正文[/color][/size][/b]===============================================
[b] [color=blue] [size=medium]精要:
[/size] [/color] [/b]
[size=medium]
[b][color=darkred]1 类型名字符串 ——> Class<T>
例
2 Class<T>——>类型名字符串
例
[b] [color=blue] [size=medium]
完整测试样例:
[/size] [/color] [/b]
这是一个简单的工厂泛型。
在工厂构造函数中,增加一个字符串参数------ T的类型名。最大好处时,在spring注入时,没有必要的担心spring不忠实执行。
本例没有展示”Class<T>——>类型名字符串”, 在调试窗口,自行验证吧。
[color=darkblue]
[size=medium]注:如有不太明白者,建议先看Dao的泛型设计,然后再来看本例,会有收获![/size][/color]
========================================================================
在泛型Dao设计中,常常需要得到参数T的类型,以便实例化,或传给其他框架。
实际上,参数T的类型的获得非常简单。不像网上传言,无法获得,至少java 6中很简单(在5中没测试过)
[b] [color=blue] [size=medium]
附
[/size] [/color] [/b]
spring允许JavaBean的属性是泛型。
例:
[color=brown][b]假定[/b][/color]一个JavaBean中有一个属性:
private Class<T> pojoClass //注意当然有setter属性,这里略。
[color=brown][b]则[/b][/color]在spring的配置中,相关属性可如下写
<property name=" pojoClass " value="model.User"/>
其中:model.User是类名。
===============================[b][size=medium][color=blue]正文[/color][/size][/b]===============================================
[b] [color=blue] [size=medium]精要:
[/size] [/color] [/b]
[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]
[b] [color=blue] [size=medium]
完整测试样例:
[/size] [/color] [/b]
这是一个简单的工厂泛型。
在工厂构造函数中,增加一个字符串参数------ 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);
}
}
[color=darkblue]
[size=medium]注:如有不太明白者,建议先看Dao的泛型设计,然后再来看本例,会有收获![/size][/color]
========================================================================