java注入未知类型的bean时出现“捕获?”错误

l2osamch  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(419)

我必须注入一个类型未知的bean,定义如下:

@Bean 
public TestService<?> testService() {
    return new DefaultTestServiceImpl();
}

其中,上述类别的详细信息如下:

public interface TestService<T extends Info> {
    void insert(T info) throws Exception;
}

public class DefaultTestServiceImpl implements TestService<Info> {
    void insert(Info info) throws Exception;
}

我使用以下方法注入bean:

private final TestService<?> testService;

我尝试在我的服务中调用该方法,如下所示:

Info info = new Info();
testService.insert(info);

然而,idea建议在“插入(信息)”处出现错误“捕获”。我试了很多方法想弄明白,但都找不到答案。有人能帮忙吗?

piok6c0g

piok6c0g1#

编译器抱怨的原因是它无法确认操作的类型安全性。编译器无法知道应该为 insert 方法,因为使用了通配符。
作为一种可能的解决方案,您可以尝试铸造 testService 在调用相应类型的对象的方法之前。例如

TestService<Info> castedTestService = (TestService<Info>) testService;
Info info = new Info();
castedTestService.insert(info);

相关问题