我有一个接口DAO<T>
和它的通用实现(GenericDAO<T> implements DAO<T>
)。
我想做这样的事情:
public interface UserDao extends Dao<User> {
// code
}
// module
bind(UserDao.class).to(GenericDao.class);
可能吗?我设法自动向 GenericDao 注入了 Dao(我没有创建特定的 userdao 实现),但是,无法让它工作......
我有一个接口DAO<T>
和它的通用实现(GenericDAO<T> implements DAO<T>
)。
我想做这样的事情:
public interface UserDao extends Dao<User> {
// code
}
// module
bind(UserDao.class).to(GenericDao.class);
可能吗?我设法自动向 GenericDao 注入了 Dao(我没有创建特定的 userdao 实现),但是,无法让它工作......
您必须最终选择一个类型T
才能实际使用泛型类。对于您最终使用的每种类型,您需要创建一个像这样的绑定(使用Integer
for T
)作为示例:
bind(new TypeLiteral<DAO<Integer>>(){})
.to(new TypeLiteral<GenericDAO<Integer>>(){});
我不认为你可以绑定UserDao
到GenericDao
. 因为GenericDao
没有实现UserDao
,尽管两者都有共同的祖先。如果GenericDao
类具有您需要的所有方法,那么您不需要单独的UserDao
类。您只需要 Jeff 所写的绑定:
bind(new TypeLiteral<DAO<User>>(){}).to(new TypeLiteral<GenericDAO<User>>(){});
然后,您的客户类将依赖DAO<User>
,并且他们将收到GenericDAO<User>
。如果您确实需要一些User
特定于实体的操作,那么您应该扩展GenericDao<User>
.
我写了一篇关于这个主题的帖子。具体见帖子底部。