论坛首页 Java企业应用论坛

泛型中,Class<T>简明获得

浏览 5713 次
精华帖 (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的泛型设计,然后再来看本例,会有收获!



========================================================================
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics