回覆列表
-
1 # 滴逃逃
-
2 # jimware
ParameterizedType pt =(ParameterizedType)this.getClass().getGenericSuperclass();Class<T> entityClass =(Class<T>)pt.getActualTypeArguments()[0];entityClass就是實際型別。
-
3 # 但求無Bug
我認為,如果在方法內部獲取還是可行的,但如果希望透過一個方法來獲取一個泛型方法的真實泛型型別,那應該是實現不了。
首先Java中的泛型,也叫引數化型別,沒記錯泛型應該是jdk5引入的特性,泛型目的在於使資料型別可以作為引數傳入,從而可以動態的改變某個變數的資料型別。
那麼什麼是泛型方法呢?就是泛型型別是宣告在方法上,只有當呼叫該方法時才會將真實型別傳入。如果你是在方法內部獲取那直接呼叫泛型物件的getClass方法即可。但如果希望透過一方法來獲取某個泛型方法的真實型別,我認為沒法實現。因為未呼叫方法時,真實的資料型別還未入,所以根本無法取到泛型對應的真實型別。
所以下面我就說說如何在泛型方法內部獲取泛型的真實型別。
老規矩,咱寫段程式碼再來解釋。泛型方法的例子如下圖:
在上圖中,我聲明瞭一個泛型方法:findFirst, 用於獲取陣列的第一個元素。
執行結果如下圖:
package test;
import java.util.ArrayList;
import java.util.List;
public class Test01 {
public static void main(String[] args) {
List<String> strings = new ArrayList<String>();
strings.add("123");//模擬返回一個泛型
System.out.println(strings.getClass());//第一次取型別
System.out.println(strings.get(0).getClass());//假如透過第一步知道是ArrayList型別,則再取型別
}
}
輸出結果:
class java.util.ArrayList
class java.lang.String
這裡只舉例講一下方法,不知道是不是你想要的,