4

这是我的一堂课:

public class ProxyDAO<T extends DAO<? extends Model>> implements DAO<? extends Model> {
   ...
}

编译器抱怨A supertype may not implement a wildcard.

我试过这个:

public class ProxyDAO<T extends DAO<? extends Model>> implements DAO<Model> {
   ...
}

但是现在不允许使用 Model 的子类。

我如何告诉编译器 ProxyDAO 实现了 DAO 接口并且该接口将接受 Model 类或任何子类或 Model ?

DAO.java

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

3 回答 3

4

使用以下内容:

public class ProxyDAO<T extends Model> implements DAO<T>

如果您需要允许 DAO 的子类:

public class ProxyDAO<T extends Model, V extends DAO<T>> implements DAO<T>
于 2012-11-30T10:15:19.350 回答
1

做某事

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

}
于 2012-11-30T10:23:09.287 回答
0

我明白了。在implements子句中,除了使用两个泛型参数外,不可能设置未定义的类型。您可以在那里设置实际类型,例如Model. 所以这段代码可以工作:

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.");
    }
}
于 2012-11-30T10:24:28.277 回答