【问题标题】:How to initialize generic type using Factory Design Pattern in Java Spring?如何在 Java Spring 中使用工厂设计模式初始化泛型类型?
【发布时间】:2022-01-10 13:42:56
【问题描述】:

我需要初始化类的泛型类型,但我做不到。就我所做的研究而言,工厂设计模式在进行这种泛型类型初始化方面要好得多,但我不知道如何。

这是我的通用服务;

@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() 给出了一个错误,为了实现这一点,我需要找到一种方法来初始化实体。我怎样才能做到这一点?

【问题讨论】:

    标签: java spring generics design-patterns


    【解决方案1】:

    我在这里看到两个选项:

    第一个选项:定义要在具体类中实现的抽象工厂方法:

    protected abstract Entity newEntity();
    

    第二个选项:将类传递给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);
    }
    

    【讨论】:

    • 或者将工厂方法(作为Supplier)传递给initialize方法。
    • @f1sh 好的:这是第三个
    • 第一个选项完美!
    猜你喜欢
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多