2012-07-25 26 views
2

我有一個接口DAO<T>,它的一個通用實現(GenericDAO<T> implements DAO<T>)。GenericDao與Guice

我就喜歡做這樣的事情:

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

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

這可能嗎? 我設法工作道的注入,自動將GenericDao(我沒有創建UserDAO的具體實現),但不能得到這個工作...

+0

可能重複的[注射使用吉斯通用實現](http://stackoverflow.com /問題/ 4238919 /注入泛型的實現 - 使用 - 吉斯) – 2012-07-26 07:44:33

回答

2

我不認爲你可以綁定UserDaoGenericDao。因爲GenericDao不實現UserDao,儘管兩者都有一個共同的祖先。如果GenericDao班有你需要的所有方法,那麼你不需要單獨的UserDao班。你只需要一個結合傑夫寫道:然後

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

您的客戶端類將取決於DAO<User>,並會收到GenericDAO<User>。如果您確實需要一些User實體特定操作,那麼您應該擴展GenericDao<User>

我寫了一篇關於topic的帖子。具體來說,請參閱帖子的底部。

3

您必須最終選擇T的類型才能真正使用泛型類。對於每一個你最終使用類型,則需要創建這樣的結合(使用IntegerT)爲例:的

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