我正在研究的项目中有这种方法(缩写):
public <T> T query(
final Extractor<T> extractor, final List result) {
//...
return extractor.extract(result)
//...
}
将Extractor定义为:
public interface Extractor<T> {
T extract(List<Map<String, Object>> result);
}
在Eclipse中没有任何错误,但是IntelliJ拒绝使用Incompatible types: Required: T Found: Object
编译类,唯一的方法是,如果我将返回值转换为T或返回Object而我可以&#39;弄清楚它失败的原因。
答案 0 :(得分:3)
我在Eclipse中遇到了同样的错误。
这可能是由使用原始List
类型引起的。
将query
方法的签名更改为:
public <T> T query(final Extractor<T> extractor, final List<Map<String, Object>> result)
修复它。
答案 1 :(得分:1)
您需要将type argument添加到参数:
query(final Extractor<T> extractor, final List<Map<String, Object>> result){
由于类型不匹配(Raw Type)而出现错误消息。以下是关于原始类型的文档:
原始类型显示在遗留代码中,因为有很多API类(例如 在JDK 5.0之前,Collections类不是通用的。使用时 原始类型,你基本上得到pre-generics行为 - 一个Box(在你的情况下List)给你 对象。为了向后兼容,请为其分配参数化类型 允许其原始类型