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;
}
}
反射获取类泛型对象
最新推荐文章于 2023-10-07 16:50:36 发布