9

一般的な Dao インターフェイスを作成していますが、いくつか問題が発生しました。

私は次の一般的なエンティティインターフェースを持っています

public interface Entity<T> {

    T getId();

    //more code
}

したがって、ジェネリック パラメータはエンティティの ID を表すことになっています。そして今、私はこのような一般的な Dao ininterface を書きたいと思っています

public interface Dao<T extends Entity<E>> {

    //more code

    T find(E id); 

}

通話できるように

T find(E id)

電話する代わりに

T find(Object id)

タイプセーフではありません。

残念ながら、コンパイラは E in を解決できないようです

Dao<T extends Entity<E>>

この問題の回避策があるかどうか知っている人はいますか?それとも Java では不可能なのでしょうか?

4

1 に答える 1

10

主キーもパラメーターとして渡す必要があります。

public interface Dao<K, T extends Entity<K>>

通常、pk はシリアライズ可能であるため、上記の署名を改善できます。

public interface Dao<K extends Serializable, T extends Entity<K>>

と:

public interface Entity<K extends Serializable>

それで:

public class UserDao implements Dao<Integer, User> {
}
于 2013-06-07T07:53:38.273 に答える