首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >焊接-001562:具有通用签名的生产者方法

焊接-001562:具有通用签名的生产者方法
EN

Stack Overflow用户
提问于 2021-09-21 15:23:03
回答 1查看 82关注 0票数 0

我使用的焊接4.0和我的制作方法之一,我有以下签名:

代码语言:javascript
复制
@Produces
  @ConfigurationType
  public <T extends IConfiguration> T getConfigurationInstance(InjectionPoint injectionPoint){
                <perform some logic, create an instance of class T and return>
}

目标是有几种配置。基于ConfigurationType (Database/Server/Datasource blah,blah),返回一个特定类型的配置实例,该实例实现了IConfiguration接口,因此我可以以更可读的格式处理返回的实例,比如JDK14记录或其等效的实例。换句话说,我只想说serverConfigurationInstance.port()来读取端口,其中serverConfigurationInstance是由注入器逻辑生成和返回的。

现在,启动时的焊接容器告诉我如下:

执行Java类时发生异常。焊接-001562:生成器方法返回类型可能不是类型变量或数组类型,其组件类型是类型变量: ERROR @ConfigurationType @在config.ConfigurationInjector.getConfigurationInstance(ConfigurationInjector.java:0)生成公共config.ConfigurationInjector.getConfigurationInstance(ConfigurationInjector.java:0)错误

雅加达焊接文档(4.0.1)或搜索特定的错误代码或消息没有进一步引导我。我做错什么了?

EN

回答 1

Stack Overflow用户

发布于 2021-09-21 20:15:17

如果您查看了规格,它会说:

如果生产者方法返回类型类型是类型变量或数组类型,其组件类型是类型变量,容器将自动检测问题并将其视为定义错误。

这就是你所犯错误的原因。

规范似乎允许从producer方法返回带有类型变量的参数化类型,只要作用域是@Dependent --这是您的情况。类似于:

代码语言:javascript
复制
@Produces
@ConfigurationType
public <T extends IConfiguration> Supplier<T> getConfigurationInstance(InjectionPoint injectionPoint){
  <perform some logic, create a supplier of an instance of class T and return>
}

但是,这样,容器“魔术”(例如拦截)就会发生在容器对象上,而不是您创建的IConfiguration实例上,这可能是您想要的,也可能不是您想要的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69271568

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档