1. 程式人生 > >Java | 獲取類中所有的泛型對應的class型別

Java | 獲取類中所有的泛型對應的class型別

一般獲取具體某個類的class型別,直接呼叫 getClass()方法或者 .class。但是在一些抽象類 或者 介面中,我們需要獲得泛型對應的class型別,以上方法就不再適用。比如以下場景,想獲得AbstractServiceImpl中的三個泛型型別:

/**
 *
 * 通用service,這裡有三個泛型 T,D,ID
 * Created by zhangshukang on 2018/1/8.
 */

public abstract class AbstractServiceImpl<T extends BaseDTO,D extends BaseDO, ID extends Serializable
> implements BaseService<T,D,ID> {
public BaseMapper<D, ID> baseMapper; @Override @Autowired public void setBaseMapper(BaseMapper<D, ID> baseMapper) { this.baseMapper = baseMapper; } @Override public long insert(T t) { //這裡在抽象的業務邏輯中,需要獲得泛型對應的 class 型別
Class<D> dc = (Class<D>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[1]; D d= BeanUtils.simpleDOAndBOConvert(t,dc); int result = baseMapper.insert(d); return id; } }


關鍵程式碼:((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()

方法,獲得的是當前類所有的泛型型別,而且是有順序的,順序為定義類時泛型的位置:

public abstract class AbstractServiceImpl<T extends BaseDTO,D extends BaseDO, ID extends Serializable> implements BaseService<T,D,ID>

這裡寫圖片描述
對應的位置關係如上圖。