Java | 獲取類中所有的泛型對應的class型別
阿新 • • 發佈:2019-01-30
一般獲取具體某個類的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>
對應的位置關係如上圖。