反射获取类泛型对象

public class BaseCovertDTO<DTO,entity> {

    public DTO getDTO(entity entity) {
        //此类作为一个父类,具体的对象是该类的子类,运行时具体的对象想知道当前父类泛型是多少
        //首先得获取本类Class,然后有两个方法
        //一个是class.getSuperclass()这是获得父类
        //一个是class.getGenericSuperclass()获得父类的泛型
        Type genericSuperclass = this.getClass().getGenericSuperclass();
        //获取到类型但是是Type类型,不是实际参数类型(是Type的子接口),要强转为实参型
        ParameterizedType param = (ParameterizedType) genericSuperclass;
        //父类泛型可能有好几个,所以是个数组,本梨中需要知道的是DTO,也就是第一个泛型
        Type actualTypeArgument = param.getActualTypeArguments()[0];
        //获取到的仍然是Type类型的,但实际是这已经获得到了反射类型,需要强转为本类class
        Class<DTO> c = (Class<DTO>) actualTypeArgument;
        DTO dto = null;
        try {
            dto = c.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        BeanUtils.copyProperties(entity,dto);
        return dto;
    }

    public entity getEntity(DTO dto) {
        Class<entity> c = (Class<entity>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[1];
        entity entity = null;
        try {
            entity = c.newInstance();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
        BeanUtils.copyProperties(dto,entity);
        return entity;
    }
 }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值