Java-这个泛型类的正确签名是什么?

Java-这个泛型类的正确签名是什么?,java,generics,Java,Generics,这是我的一节课: public class ProxyDAO<T extends DAO<? extends Model>> implements DAO<? extends Model> { ... } 但现在不允许使用模型的子类 我如何告诉编译器ProxyDAO实现了DAO接口,并且该接口将接受一个模型类或任何子类或模型 DAO.java public interface DAO<T extends Model> { T fin

这是我的一节课:

public class ProxyDAO<T extends DAO<? extends Model>> implements DAO<? extends Model> {
   ...
}
但现在不允许使用模型的子类

我如何告诉编译器ProxyDAO实现了DAO接口,并且该接口将接受一个模型类或任何子类或模型

DAO.java

public interface DAO<T extends Model> {
    T findByPK(Object pk);
}
公共接口DAO{
T findByPK(对象pk);
}
使用以下方法:

public class ProxyDAO<T extends Model> implements DAO<T>
公共类ProxyDAO实现DAO
如果需要考虑DAO的超类:

public class ProxyDAO<T extends Model, V extends DAO<T>> implements DAO<T>
公共类ProxyDAO实现DAO
像这样做

class ProxyDao<M extends Model, T extends Dao<M>> implements Dao<M> {

}
类ProxyDao实现Dao{
}

我明白了。在
implements
子句中,除了使用两个泛型参数外,无法设置未定义的类型。您可以在那里设置实际类型,如
模型
。因此,该代码将起作用:

class Model{}

class SubModel extends Model{}

interface DAO<T extends Model> {
    T findByPK(T pk);
}

class ProxyDAO<T extends DAO<? extends Model>> implements DAO<Model> {

    public ProxyDAO() {
        findByPK(new SubModel());
    }

    @Override
    public Model findByPK(Model pk) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}
类模型{}
类子模型扩展了模型{}
接口道{
T-findByPK(T-pk);
}
类ProxyDAO
class Model{}

class SubModel extends Model{}

interface DAO<T extends Model> {
    T findByPK(T pk);
}

class ProxyDAO<T extends DAO<? extends Model>> implements DAO<Model> {

    public ProxyDAO() {
        findByPK(new SubModel());
    }

    @Override
    public Model findByPK(Model pk) {
        throw new UnsupportedOperationException("Not supported yet.");
    }
}