9

我正在写一个通用的 Dao 接口,我遇到了一些问题。

我有以下通用实体接口

public interface Entity<T> {

    T getId();

    //more code
}

所以泛型参数应该代表实体的id。现在我想写一个像这样的通用 Dao initerface

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 回答