我有一个接口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才能实际使用泛型类。对于您最终使用的每种类型,您需要创建一个像这样的绑定(使用Integerfor 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>.
我写了一篇关于这个主题的帖子。具体见帖子底部。