当您要求
@Inject MyDao<Customer> dao;
容器知道您要一个类型为的bean
MyDao<Customer>。如果存在这样的bean并且其类型信息已知,则容器可以满足注入。例如,类型信息保留在带
@Produces注释的方法中
@ProducesMyDao<Product> getDaoProduct() {容器使用反射来检索该参数化的类型,并将其与请求的
@Inject字段匹配。
用
abstract class MyView<T> { @Inject MyDao<T> dao;但是,容器只知道您需要一个
MyDao。
T是类型变量,而不是具体的参数化。容器不能为其指定特定类型。在您的情况下,两个
@Producesbean都将匹配并且存在歧义。
在您的示例中,我们从上下文中知道它确实需要一个
MyDao<Customer>。这似乎不是您的容器能够执行的操作,即。尝试将类型参数解析为参数化子类的具体类型参数。



