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>

这里写图片描述
对应的位置关系如上图。

猜你喜欢

转载自blog.csdn.net/woshilijiuyi/article/details/79015789