Java 7
我有一个界面:
public interface MyInt{
public Map<String, WhereClause> createClauses(Parameters<Object> params);
}
及其一些实现:
public class MyImpl implements MyInt{
@Override
public Map<String, WhereClause> createClauses(Parameters<Object> p) { //1
//return some
}
}
现在,我可以让它的返回类型成为通用的。我试过这个:
public interface MyInt <T extends SomeType>{
public Map<String, ? extends WhereClause> createClauses(Parameters<Object> params);
}
但是我在 //1
的实现中遇到了编译时错误:
The method createClauses(Parameters<Object>) of type `MyImpl` must
override or implement a supertype method
但是当我删除泛化时,实现可以正常编译。
为什么即使不使用类型参数
,泛化也会影响编译。
最佳答案
在几乎所有情况下,当您发现自己在泛型中使用 ?
时,您都做错了:
public interface MyInt<C extends WhereClause> {
public Map<String, C> createClauses(Parameters<Object> params);
}
private static class MyWhereClause extends WhereClause {
public MyWhereClause() {
}
}
public class MyImpl implements MyInt<MyWhereClause> {
@Override
public Map<String, MyWhereClause> createClauses(Parameters<Object> p) {
return null;
}
}
关于java - 接口(interface)的泛化导致编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33081684/