我必须注入一个未知类型的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提出了错误";捕获"在";插入(信息(";。我试了很多方法想弄清楚,但都没有得到答案。有人能帮忙吗?
编译器抱怨的原因是它无法确认操作的类型安全性。由于使用了通配符,编译器无法知道应该为insert
方法提供什么参数类型。
作为一种可能的解决方案,可以尝试在调用其方法之前将testService
强制转换为适当类型的对象。例如,
TestService<Info> castedTestService = (TestService<Info>) testService;
Info info = new Info();
castedTestService.insert(info);