我一直在这里搜索,但我没有找到答案。
在我的应用程序中,我为我的控制器提供了一个抽象的主类,包含一些方法和属性。我想自动注入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。
为此存在替代方案吗?
感谢。
答案 0 :(得分:2)
在技术上,反射通过源中的泛型声明检测正确的运行时类型并强制转换为非常复杂。 Weld根本不会也不会支持它。
最好针对AbstractDAO<E>
声明:
private AbstractDAO<E> dao;
无论如何,你对D
宣告它没有任何好处。