不兼容的类型:必需:T Found:Object - IntelliJ

时间:2017-08-22 11:33:35

标签: java generics intellij-idea

我正在研究的项目中有这种方法(缩写):

   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;弄清楚它失败的原因。

2 个答案:

答案 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)给你   对象。为了向后兼容,请为其分配参数化类型   允许其原始类型