2

私はインターフェースDAO<T>とそれの一般的な実装を持っています(GenericDAO<T> implements DAO<T>)。

私はこのようなことをしたいと思います:

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

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

出来ますか?私はDaoをGenericDaoに自動的に注入することができました(特定の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

UserDaoにバインドできるとは思いませんGenericDaoGenericDaoを実装していないため、UserDao両方に共通の祖先がありますが。クラスに必要なすべてのメソッドがある場合は、個別のクラスGenericDaoは必要ありません。UserDaoジェフが書いたように、バインディングだけが必要です。

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

クライアントクラスはに依存しDAO<User>、を受け取りGenericDAO<User>ます。Userエンティティ固有の操作が必要な場合は、を拡張する必要がありGenericDao<User>ます。

このトピックに関する投稿を書きました。具体的には、投稿の下部をご覧ください。

于 2012-07-26T09:43:52.650 に答える