gpt4 book ai didi

Java 泛型接口(interface)和 Spring GetBean 按 Id 和类类型

转载 作者:行者123 更新时间:2023-11-29 09:07:08 29 4
gpt4 key购买 nike

我有一个通用接口(interface),我可以为其提供许多实现,对于每个这样的实现,我在 spring 定义文件中关联一个 id 属性。

IConfigurationService<T>

现在我正在尝试编写一个实用方法,它可以通过 id 获取我的实现。

以下方法是一个实用方法,它会向我抛出一条警告消息:

public <T extends Serializable> IConfigurationService<T> getBean(Class<T> type, String id){
return (IConfigurationService<T>)context.getBean(id, IConfigurationService.class);
}

警告信息:类型安全:未经检查的从 IConfigurationService 到 IConfigurationService 的转换。

我如何摆脱这个警告消息?

如果我按如下方式更改返回语句,则会出现编译错误:

return (IConfigurationService<T>)context.getBean(id, IConfigurationService<T>.class);

如果有人能确定我在这里做错了什么,我会很有帮助。

最佳答案

除了抑制它之外,您无法摆脱该警告。这是因为 Java 泛型中的运行时类型删除。类文字 IConfigurationService.class不提供任何通用类型信息。所以你得到一个IConfigurationService<?>context.getBean 返回.您必须将其转换为适当的类型。

但是您可以使用变通方法来解决这个问题。当你声明

@Resource
private IConfigrationService<Foo> configService;

在您的一个 spring 上下文管理类中,spring 将确保只注入(inject) IConfigurationService 的实现。其类型参数与 Foo 兼容.

关于Java 泛型接口(interface)和 Spring GetBean 按 Id 和类类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14353526/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com