如何在 Java Spring 中使用工厂设计模式初始化泛型类型?
How to initialize generic type using Factory Design Pattern in Java Spring?
我需要初始化 class 的通用类型,但我做不到。据我研究,工厂设计模式更适合进行泛型类型初始化,但我不知道怎么做。
这是我的通用服务;
@Service
public abstract class GaService<Entity extends Ga<? extends Play>, DTO extends GaDTO<? extends PlayDTO>> {
@Autowired
protected GaRepository<Entity> repository;
@Autowired
protected Mapper<Entity, DTO> mapper;
public DTO initialize(){
Entity entity = new Entity();
repository.save(entity);
return mapper.toDTO(entity);
}
如您所见,我的 new Entity()
出现错误,为此,我需要找到一种初始化实体的方法。我怎样才能做到这一点?
我在这里看到两个选项:
第一个选项:定义一个抽象工厂方法在具体classes:
中实现
protected abstract Entity newEntity();
第二个选项:将 class 传递给 initialize
方法:
public DTO initialize(Class<Entity> entityClass){
Entity entity = entityClass.newInstance();
repository.save(entity);
return mapper.toDTO(entity);
}
更新:第三个选项:传递 Supplier
initialize
方法:
public DTO initialize(Supplier<Entity> newEntity){
Entity entity = newEntity.get();
repository.save(entity);
return mapper.toDTO(entity);
}
我需要初始化 class 的通用类型,但我做不到。据我研究,工厂设计模式更适合进行泛型类型初始化,但我不知道怎么做。
这是我的通用服务;
@Service
public abstract class GaService<Entity extends Ga<? extends Play>, DTO extends GaDTO<? extends PlayDTO>> {
@Autowired
protected GaRepository<Entity> repository;
@Autowired
protected Mapper<Entity, DTO> mapper;
public DTO initialize(){
Entity entity = new Entity();
repository.save(entity);
return mapper.toDTO(entity);
}
如您所见,我的 new Entity()
出现错误,为此,我需要找到一种初始化实体的方法。我怎样才能做到这一点?
我在这里看到两个选项:
第一个选项:定义一个抽象工厂方法在具体classes:
中实现protected abstract Entity newEntity();
第二个选项:将 class 传递给 initialize
方法:
public DTO initialize(Class<Entity> entityClass){
Entity entity = entityClass.newInstance();
repository.save(entity);
return mapper.toDTO(entity);
}
更新:第三个选项:传递 Supplier
initialize
方法:
public DTO initialize(Supplier<Entity> newEntity){
Entity entity = newEntity.get();
repository.save(entity);
return mapper.toDTO(entity);
}