Java獲得泛型的Class類型


https://blog.csdn.net/taotaojs/article/details/81906511

搭框架ing

今天在解決Bean對象與VO對象相互轉換以及Controller兼容兩種對象的問題

這次就來談談遇到的一個印象最深刻的問題——泛型獲取類型

上代碼

public class BeanController<T,V> {
 
 
 
@Autowired
 
IBeanService<T> beanService;
 
 
 
@RequestMapping("/list")
 
@ResponseBody
 
public Object list() throws Exception{
 
List<T> list = beanService.findAll();//查詢所有結果
 
return EntityUtils.copyDataList(list, /*TODO 要得到V的類型*/);//將Bean對象轉為VO對象
 
}
 
}

 

EntityUtils.copyDataList方法就是將兩個List集合的數據相互復制,比如說List<Staff>和List<StaffVO>

而第二個參數剛好需要V的類型

V是不能實例化或者.Class的

這里引用了 轉載超多的一篇文章

江南白衣的blog文章:使用反射來獲得“T.class”。  原文地址:

江南白衣的blog文章:使用反射來獲得“T.class”

 感興趣的同學可以去看看,試着理解一下。我個人感覺看轉載還是看原版的好,特別是那種完全復制過來的轉載,百度一搜一大片,還可能因為版本等 各種問題測試不通過,不開篩選真的沒法看。。

好了,嗶嗶結束

江南白衣的這篇文章大概就是 創建一個父類,讓需要獲取泛型類型的類更方便使用,如下

 

import lombok.Data;
 
 
 
@Data
 
public class GenericityOperationSuper<T> {
 
 
 
/** 泛型的類型 */
 
private Class<T> entityClass;
 
 
 
private int index = 1;
 
 
 
public GenericityOperationSuper(){
 
BaseHibernateEntityDao();
 
}
 
 
 
@SuppressWarnings("unchecked")
 
public void BaseHibernateEntityDao() {
 
//System.out.println("classList +++++++++" + ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments());
 
entityClass =(Class<T>) ((ParameterizedType) getClass()
 
.getGenericSuperclass()).getActualTypeArguments()[index];
 
}
 
 
 
}

 

 

 

因為我是雙泛型,所以就加了一個index序號,index=1表示獲取第二個泛型【顧名思義,江南白衣獲取的就是第一個泛型】

 

而這很長的語句就是獲取本類所有的泛型(可以自己打印看看)

注意:如果子類繼承了該類,那么這里的本類已經指子類了

所以要獲取泛型的類型只要獲取entityClass屬性即可,如下

 

public class BeanController<T,V> extends GenericityOperationSuper<V> {
 
 
 
@Autowired
 
IBeanService<T> beanService;
 
 
 
@RequestMapping("/list")
 
@ResponseBody
 
public Object list() throws Exception{
 
List<T> list = beanService.findAll();//查詢所有結果
 
return EntityUtils.copyDataList(list, getEntityClass());//將Bean對象轉為VO對象
 
}
 
}

 

 

這里GenericityOperationSuper<V>中的V

親測對結果沒有任何影響,你把他刪了都行【就是會出現黃黃的波浪線】

我Bean對象和VO對象沒有內部關聯, 按理說應該返回會有影響的,后續討論

好了,就是這樣,快去捕捉自己的小泛型吧。

噢,這個通用Controller只是用來開發的時候做測試的,因為開發了好幾個項目,發現基本的操作都是需要加工處理的, 這樣就沒必要了,對架構啥的還處於一知半解。

最后歡迎大神/小伙伴留言討論~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM