[英]SpringBoot: create object from generic type in generic mapper
我有很多實體擴展Catalog
實體,並且有很多 d 到那個程度CatalogDto
我有一個通用的存儲庫、服務和映射器,如下所示
我的存儲庫:
@Repository
public interface CatalogRepository<T extends Catalog> extends JpaRepository<T, Integer>{
}
我的服務:
@Service
@Transactional
public class CatalogServiceImpl<T extends Catalog,Dto extends CatalogDto>{
private final Logger log = LoggerFactory.getLogger(CatalogServiceImpl.class);
private final CatalogRepository<T> repository;
private CatalogMapper<T,Dto> catalogMapper=new CatalogMapper<T,Dto>() {};
public CatalogServiceImpl(CatalogRepository<T> repository) {
this.repository = repository;
}
}
我的映射器:
public abstract class CatalogMapper<T extends Catalog,Dto extends CatalogDto> implements Rapper<T,Dto> {
@Override
public Dto entityToDto(T entity) {
return null;
}
@Override
public T dtoToEntity(Dto dto) {
return null;
}
}
我想從dtoToEntity
方法中的 T 創建一個對象,並在CatalogMapper
類的entityToDto
方法中從dtoToEntity
創建一個對象
我認為這兩種方法應該是抽象的,因為每個映射器可能以不同的方式工作。 無論如何,您可以提供這樣的基本實現
public T dtoToEntity(Dto dto) throws InstantiationException, IllegalAccessException {
T entity = (T) ((Class)((ParameterizedType)this.getClass().
getGenericSuperclass()).getActualTypeArguments()[0]).newInstance();
BeanUtils.copyProperties(dto, entity);
return entity;
}
public Dto entityToDto(T entity) throws InstantiationException, IllegalAccessException {
Dto dto = (Dto) ((Class)((ParameterizedType)this.getClass().
getGenericSuperclass()).getActualTypeArguments()[1]).newInstance();
BeanUtils.copyProperties(entity, dto);
return dto;
}
使用泛型類的ParameterizedType您可以創建一個新實例,然后執行一個簡單的 copyProperties
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.