Java - 泛型参数无法解析

时间:2013-06-07 07:52:07

标签: java generics

我正在编写一个通用的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做到这一点?

1 个答案:

答案 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> {
}