1

DataNucleus JDO DAO 用の汎用 DAO を作成しています。ジェネリック DAO は、取得、更新、削除、作成操作、およびその他のジェネリック操作を実行するため、これらの実装をより具体的な DAO に拡張することができます。

何らかの形でジェネリック DAO を拡張し、たとえば ID でオブジェクトを取得するときに正しい型を返すようにすることは可能ですか?

User user = userDao.get(userId); // Is this possible when UserDao extends generic DAO ?? userDao should return user of type User instead of object.
4

2 に答える 2

3

はい、ジェネリックでこれを行うことができます:

public abstract class Dao<T> {
    public T get(String id) { ... }

    ...
}

public class UserDao extends Dao<User> {
    ...
}

UserDao userDao = new UserDao();
User user = userDao.get(userId); //Returns a User

必要に応じてDao<T>、抽象基本クラスまたは汎用インターフェイス (例:public interface IDao<T> { ... }

于 2012-09-24T08:42:34.697 に答える
1

あなたの質問の一部は、すでに verdesmarald によって回答されています。verdesmarald のコードに 1 つの重要な変更を加えたいと思います

継承よりも構成を優先する必要があります。Dao から UserDao を拡張する代わりに、UserDao に Dao が必要です。このように、コードは単一の実装にバインドされず、単体テスト中に Dao をモックすることが可能になります。

于 2012-09-24T08:56:18.330 に答える