这是我的课程:
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类还是任何子类或模型?
DAO.java
public interface DAO<T extends Model> {
T findByPK(Object pk);
}
答案 0 :(得分:4)
使用以下内容:
public class ProxyDAO<T extends Model> implements DAO<T>
如果您需要允许DAO的超类:
public class ProxyDAO<T extends Model, V extends DAO<T>> implements DAO<T>
答案 1 :(得分:1)
做点什么
class ProxyDao<M extends Model, T extends Dao<M>> implements Dao<M> {
}
答案 2 :(得分: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.");
}
}