我正在编写一个通用的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.Dao<T extends Entity<E>>
你们中是否有人知道这个问题是否有解决方法,或者只是不可能用Java做到这一点?
答案 0 :(得分: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> {
}