当前位置: 首页 > 知识库问答 >
问题:

如何在JavaSpring中使用工厂设计模式初始化泛型类型?

翟兴邦
2023-03-14

我需要初始化类的泛型类型,但无法初始化。就我所做的研究而言,工厂设计模式更适合进行这种泛型类型初始化,但我不知道如何进行。

这是我的通用服务;

@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()给出了一个错误,为了实现这一点,我需要找到一种初始化Entity的方法。我该如何实现这一点?

共有1个答案

巫懿轩
2023-03-14

我在这里看到两个选择:

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

protected abstract Entity newEntity();

第二个选项:将类传递给initialize方法:

public DTO initialize(Class<Entity> entityClass){
    Entity entity = entityClass.newInstance();
    repository.save(entity);
    return mapper.toDTO(entity);
}

更新:第三个选项:传递供应商初始化方法:

public DTO initialize(Supplier<Entity> newEntity){
    Entity entity = newEntity.get();
    repository.save(entity);
    return mapper.toDTO(entity);
}

 类似资料:
  • 我有一个通用接口处理程序 我可以有n个这个接口的实现。假设我现在有以下两个实现。一个处理字符串对象,另一个处理日期 我想写一个工厂,它将根据类类型返回处理程序实例。比如: 我在这个工厂里遇到了以下错误: 类型不匹配:无法从转换为

  • 我想为我的DAO层应用一个通用的设计模式,这样我就可以轻松地在第三方ORM(Hibernate、JPA等)之间切换。显然,我们有一些适用于所有DAO的通用方法,比如: 公共无效创建(T实体) 公共无效更新(T实体) 公共作废删除(对象主键) 公共T读取(对象pk) 公共列表readAll() 所有DAO都必须继承这些方法以及特定于每个DAO的附加方法,我发现以下设计模式适合我,但我不知道如何使用它

  • 问题内容: 我希望返回具有适当泛型的用户界面实例。我陷入下面的错误示例中: 绑定不匹配:BallUserInterfaceFactory类型的通用方法getBaseballUserInterface(BASEBALL)不适用于参数(BALL)。推断的类型BALL不能有效替代有界参数 我了解它不能保证BALL是棒球,因此getBaseballUserInterface方法调用上存在参数类型不匹配的情

  • 问题内容: 因此,我正在开发这个通用的HashTable类,并且希望将其通用地用于任何数量的传入类型,并且我还想将内部存储数组初始化为LinkedList的数组(出于冲突目的),其中为确保类型安全,每个LinkedList都被预先指定为HashTable类中的泛型类型。我该怎么做?以下代码最能阐明我的意图,但当然不会编译。 问题答案: Java中的泛型不允许创建具有泛型类型的数组。您可以将数组转换

  • 介绍 与创建型模式类似,工厂模式创建对象(视为工厂里的产品)时无需指定创建对象的具体类。 工厂模式定义一个用于创建对象的接口,这个接口由子类决定实例化哪一个类。该模式使一个类的实例化延迟到了子类。而子类可以重写接口方法以便创建的时候指定自己的对象类型。 这个模式十分有用,尤其是创建对象的流程赋值的时候,比如依赖于很多设置文件等。并且,你会经常在程序里看到工厂方法,用于让子类类定义需要创建的对象类型

  • 问题内容: 我已经更新了项目(基于Websphere 8.5的Java EE),以使用公司内部框架的新版本(以及Ejb 3.x部署描述符,而不是2.x部署描述符)。从那时起,我的集成测试失败,但出现以下异常: 我可以使用先前的框架版本构建应用程序,并且一切正常。调试时,我注意到ContextFinder(javax.xml.bind)中有两种不同的行为: 先前版本(一切正常):所有地方都没有调出工