2

我有一个接口DAO<T>和它的通用实现(GenericDAO<T> implements DAO<T>)。

我想做这样的事情:

public interface UserDao extends Dao<User> {
 // code
}

// module
bind(UserDao.class).to(GenericDao.class);

可能吗?我设法自动向 GenericDao 注入了 Dao(我没有创建特定的 userdao 实现),但是,无法让它工作......

4

2 回答 2

3

您必须最终选择一个类型T才能实际使用泛型类。对于您最终使用的每种类型,您需要创建一个像这样的绑定(使用Integerfor T)作为示例:

bind(new TypeLiteral<DAO<Integer>>(){})
   .to(new TypeLiteral<GenericDAO<Integer>>(){});
于 2012-08-02T19:49:07.773 回答
2

我不认为你可以绑定UserDaoGenericDao. 因为GenericDao没有实现UserDao,尽管两者都有共同的祖先。如果GenericDao类具有您需要的所有方法,那么您不需要单独的UserDao类。您只需要 Jeff 所写的绑定:

bind(new TypeLiteral<DAO<User>>(){}).to(new TypeLiteral<GenericDAO<User>>(){});

然后,您的客户类将依赖DAO<User>,并且他们将收到GenericDAO<User>。如果您确实需要一些User特定于实体的操作,那么您应该扩展GenericDao<User>.

我写了一篇关于这个主题的帖子。具体见帖子底部。

于 2012-07-26T09:43:52.650 回答