为什么不可能注入泛型类?

成员之声

我有一个通用的抽象模板类。我以为如果创建特定于类型的生产者,则可以直接在通用类中注入一些DAO服务。但是我不能。

为什么?我该如何解决?

abstract class MyView<T> {
    @Inject
    MyDao<T> dao;

    //some more template methods that make use of the dao
    void someMethod() {
        dao.use();
    }
}

class CustomerView extends MyView<Customer> {
    //javax.enterprise.inject.AmbiguousResolutionException: Ambigious resolution
}


class DaoManager {
    @Produces
    MyDao<Customer> getDaoCustomer() {
        return DaoFactory.make(Customer.class);
    }

    @Produces
    MyDao<Product> getDaoProduct() {
        return DaoFactory.make(Product.class);
    }
}

当我注入一个例如@Inject MyDao<Customer> dao;它完美地工作。但是没有泛型...

Sotirios Delimanolis

当您要求

@Inject MyDao<Customer> dao;

容器知道您要一个类型为的bean MyDao<Customer>如果存在这样的bean并且其类型信息已知,则容器可以满足注入。例如,类型信息保留在带@Produces注释的方法中

@Produces
MyDao<Product> getDaoProduct() {

容器使用反射来检索该参数化类型,并将其与请求的@Inject字段匹配

abstract class MyView<T> {
    @Inject
    MyDao<T> dao;

但是,容器只知道您需要一个MyDaoT是类型变量,而不是具体的参数化。容器不能为其指定特定类型。在您的情况下,两个@Producesbean都将匹配并且存在歧义。


在您的示例中,我们从上下文中知道它确实需要一个MyDao<Customer>这似乎不是您的容器能够执行的操作,即。尝试将类型参数解析为参数化子类的具体类型参数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在实例化具有具体类型的对象时不可能对变量使用泛型类型?

来自分类Dev

在C#泛型中这是不可能的吗?

来自分类Dev

为什么不可能获得指向基类的受保护方法的指针?

来自分类Dev

为什么不建议或不可能创建最大内聚的类?

来自分类Dev

为什么可以在TypeScript中将接口中可能的数字值转换为类实现中的不可能的数字值?

来自分类Dev

Nullable <int?>是不可能的,为什么不能呢?

来自分类Dev

为什么dcast不可能传递非聚合函数?

来自分类Dev

为什么在Haskell中不可能分割整数?

来自分类Dev

为什么在C中不可能重载?

来自分类Dev

为什么这在学说上是不可能的

来自分类Dev

Nullable <int?>是不可能的,为什么不能呢?

来自分类Dev

为什么本文中的这个问题是不可能的?

来自分类Dev

为什么不可能用焦点影响子元素?

来自分类Dev

什么是泛型类

来自分类Dev

什么是泛型类

来自分类Dev

ExtensionObjects 不可能的类名

来自分类Dev

为什么可以强制转换泛型类?

来自分类Dev

为什么不能将Objects数组转换为泛型类的泛型子类的数组?

来自分类Dev

Spring依赖注入和泛型类

来自分类Dev

给定一个字符串作为泛型类的类型名称,如何在运行时创建实例。如果不可能,还有其他方法吗?

来自分类Dev

为什么不可能将自身缺少复制运算符的对象赋给矢量?

来自分类Dev

为什么我在scala比赛中遇到不可能的情况?

来自分类Dev

为什么不可能在EventBus中注册活动?

来自分类Dev

为什么在Maven中不可能包含相同依赖项的多个版本?

来自分类Dev

为什么当我为注册人命名时,asm有不可能的限制?

来自分类Dev

SHARE锁定记录的行为,为什么聚合功能不可能?

来自分类Dev

为什么不可能将`(()-> Void)`强制转换为`(()-> Void)`?

来自分类Dev

为什么在Python中不可能实现真正的不变性?

来自分类Dev

为什么不可能指定Scala varargs参数的默认值?

Related 相关文章

  1. 1

    为什么在实例化具有具体类型的对象时不可能对变量使用泛型类型?

  2. 2

    在C#泛型中这是不可能的吗?

  3. 3

    为什么不可能获得指向基类的受保护方法的指针?

  4. 4

    为什么不建议或不可能创建最大内聚的类?

  5. 5

    为什么可以在TypeScript中将接口中可能的数字值转换为类实现中的不可能的数字值?

  6. 6

    Nullable <int?>是不可能的,为什么不能呢?

  7. 7

    为什么dcast不可能传递非聚合函数?

  8. 8

    为什么在Haskell中不可能分割整数?

  9. 9

    为什么在C中不可能重载?

  10. 10

    为什么这在学说上是不可能的

  11. 11

    Nullable <int?>是不可能的,为什么不能呢?

  12. 12

    为什么本文中的这个问题是不可能的?

  13. 13

    为什么不可能用焦点影响子元素?

  14. 14

    什么是泛型类

  15. 15

    什么是泛型类

  16. 16

    ExtensionObjects 不可能的类名

  17. 17

    为什么可以强制转换泛型类?

  18. 18

    为什么不能将Objects数组转换为泛型类的泛型子类的数组?

  19. 19

    Spring依赖注入和泛型类

  20. 20

    给定一个字符串作为泛型类的类型名称,如何在运行时创建实例。如果不可能,还有其他方法吗?

  21. 21

    为什么不可能将自身缺少复制运算符的对象赋给矢量?

  22. 22

    为什么我在scala比赛中遇到不可能的情况?

  23. 23

    为什么不可能在EventBus中注册活动?

  24. 24

    为什么在Maven中不可能包含相同依赖项的多个版本?

  25. 25

    为什么当我为注册人命名时,asm有不可能的限制?

  26. 26

    SHARE锁定记录的行为,为什么聚合功能不可能?

  27. 27

    为什么不可能将`(()-> Void)`强制转换为`(()-> Void)`?

  28. 28

    为什么在Python中不可能实现真正的不变性?

  29. 29

    为什么不可能指定Scala varargs参数的默认值?

热门标签

归档