高级Java泛型问题:为什么需要指定冗余信息

高级Java泛型问题:为什么需要指定冗余信息,java,generics,dao,Java,Generics,Dao,我的JPA模型POJO有一些通用类,如下所示: public interface Identifiable<PK extends Serializable> { PK getUniqueId(); } public interface GenericDao<T extends Identifiable<PK>> { public T findById(PK id); } 可识别的公共接口{ PK getUniqueId(); } 公共接口通

我的JPA模型POJO有一些通用类,如下所示:

public interface Identifiable<PK extends Serializable> {
    PK getUniqueId();
}

public interface GenericDao<T extends Identifiable<PK>> {
    public T findById(PK id);
}
可识别的公共接口{
PK getUniqueId();
}
公共接口通用DAO{
公共T findById(主键id);
}
这段代码无法编译。为了让它起作用,我需要指定

public interface GenericDao<T extends Identifiable<PK>, PK extends Serializable> 
公共接口GenericDao
但这是多余的信息!!T扩展了可识别的事实意味着将为可识别实例指定PK类型,并且这是DAO的PK使用的类型

在没有冗余信息的情况下,我如何使此工作正常

谢谢,弗雷德


编辑:简化示例

您是否尝试过:

public interface WatchableDao<T extends Watchable<?>>

public interface watchabledao它不工作,因为GenericDao需要指定PK。。。我简化了我的例子。您现在应该更好地理解它了。它不会编译,因为函数public t findById(pkid)需要定义PK泛型类型。也许我会接受多余的信息…谢谢你的回复。事件如果答案是否定的,我会将其作为已接受的线程:)