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
但是,当我移除泛型定义时,实现可以编译通过。
为什么即使没有使用类型参数
,泛型化仍会影响编译?
?
)”是指“泛型”吗? - xehpukpublic class MyImpl implements MyInt
,还是写implements MyInt<Something>
?如果是前者,那么问题是使用原始类型的结果,尽管我不完全理解。如果你不使用原始类型MyInt
,它可以正常工作。 - Paul BoddingtonMyInt
,因此方法参数中的类型参数<Object>
将被完全忽略!因此该方法不会覆盖接口方法。我认为这就是解释,但由于我的理解还有些模糊,所以我不会将其写成答案。 - Paul Boddington