JAVA1.5 關於解決泛型<T>當中無法獲得class的問題
在討論這個問題之前,首先大家達成共識,泛型當中是不是T.class是不存在的?答案是YES。
T.class是一個第一個想到,但是真是不存在的用法。
於是乎,聰明的你,在baidu和google上搜呀搜,看有沒有解決的方案,你可能會遇到大部分的帖子,
用反射的方法獲得T的class,我試過了,貌似不行。不置可否,我先把衆人的反射方法貼出來:
http://stackoverflow.com/questions/4837190/java-generics-get-class
- Type genType = getClass(); System.out.println(genType);
- Type[] params = (Type[])((ParameterizedType)genType).getActualTypeArguments();
- Class<T> entityClass = (Class<T>) params[0];
當然,你可以繼續搜,很多諸如此類的解決方案。
但是,我想說的是,是不是一定要用這個呢?
既然不能得到T.class,那就把類的class的傳進方法裏面吧,這種方法不見得有多麼的笨拙。
反而挺優雅的。
- public class JSONHandler<T> {
- private Class<T> _entityClass;
- public JSONHandler(Class<T> entityClass){
- this._entityClass=entityClass;
- }
好,每次new一個實例的時候,都把Object.class穿進去,何樂而不爲呢?
- JSONHandler<Weibo> weiboHandler=new JSONHandler<Weibo>(Weibo.class);
(⊙v⊙)嗯,那就這樣子先吧,終於解決了一個問題。