将@Inject与泛型类型一起使用

问题描述 投票:0回答:2

我一直在这里搜索,但没有找到答案。

在我的应用程序中,我的控制器有一个抽象主类,其中包含一些方法和属性。我想自动注入 DAO。

abstract class AbstractController<E extends AbstractEntity, D extends AbstractDAO<E>> {
    
    @Inject
    private D dao;

    // getters and setters
}

abstract class AbstractDAO<E extends AbstractEntity> {
    @PersistentContext
    private EntityManager em;

    // finds returns E
}

// implemenation/usage

class CarController extends AbstractController<Car, CarDAO> {
}

获取异常:

org.jboss.weld.exceptions.DefinitionException: WELD-001407 Cannot declare an injection point with a type variable: [field] @Inject private AbstractController.dao

使用:Glassfish 3.1 和 JSF 2.1。

有解决方法或替代方案吗?

谢谢。

jsf-2 glassfish cdi
2个回答
3
投票

反射通过源中的泛型声明检测正确的运行时类型并转换为它在技术上非常复杂。 Weld 根本不支持也不会支持它。

最好声明反对

AbstractDAO<E>

private AbstractDAO<E> dao;

无论如何,声明反对

D
你不会获得任何好处。


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.