1. 程式人生 > >獲取當前類泛型位元組碼物件的獲取方案,

獲取當前類泛型位元組碼物件的獲取方案,

問題演示

這裡寫圖片描述

解決方案1:

使用有參構造賦值,強行要求子類手動使用有參賦值
這裡寫圖片描述

解決方案2:

跟第二種方案很像,就是使用set方法賦值,
這裡寫圖片描述

解決方案3:

使用反射技術實現獲取位元組碼物件,不需要子類提供clazz,

//這種方案需要使用到有參,因為只要子類物件一床架,父類空參構造就會被呼叫 ,
    public BaseDaoImpl(){
        //子類的構造方法會預設呼叫父類空參  super(), 所以this代表子類物件
        Class childClazz = this.getClass(); //子類位元組碼物件
        //得到父類的位元組碼BaseDaoImpl的位元組碼 , 這份位元組碼上帶有泛型資料
/** * 雖然這個方法,返回值說的是Type , * 但是其實返回的是ParameterizedType的實現類型別。 * 所以我們使用ParameterizedTypeImpl介面來接收。 */ ParameterizedType genericSuperclass = (ParameterizedType) childClazz.getGenericSuperclass(); //獲取這樣可以得到泛型了 //因為泛型可能不止一個,所以返回的是陣列,所以我們取第一個,
clazz = (Class) genericSuperclass.getActualTypeArguments()[0]; }

這裡寫圖片描述

以上就是三種獲取方案,如果有更好的獲取方案,希望能評論給出,