【问题标题】:GenericDao with GuiceGenericDao 与 Guice
【发布时间】:2012-07-24 12:24:48
【问题描述】:

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

我想做这样的事情:

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

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

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

【问题讨论】:

标签: generics guice typeliteral


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    我认为您不能将UserDao 绑定到GenericDao。因为GenericDao 没有实现UserDao,尽管它们都有一个共同的祖先。如果GenericDao 类具有您需要的所有方法,那么您不需要单独的UserDao 类。您只需要 Jeff 所写的绑定:

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

    然后,您的客户端类将依赖于DAO&lt;User&gt;,它们将收到GenericDAO&lt;User&gt;。如果您确实需要一些User 实体特定操作,那么您应该扩展GenericDao&lt;User&gt;

    我已经写了一篇关于这个topic的帖子。具体见文章底部。

    【讨论】:

      猜你喜欢
      • 2012-01-24
      • 1970-01-01
      • 2015-10-09
      • 2015-05-01
      • 1970-01-01
      • 2012-06-29
      • 2014-03-03
      • 2014-04-16
      • 1970-01-01
      相关资源
      最近更新 更多