不兼容的类型:必需:T找到:对象-IntelliJ

lif*_*ary 5 java generics intellij-idea

我正在研究的项目中有此方法(略):

   public <T> T query(
        final Extractor<T> extractor, final List result) {
                //...
               return extractor.extract(result) 
                //...
    }
Run Code Online (Sandbox Code Playgroud)

提取器定义为:

public interface Extractor<T> {
    T extract(List<Map<String, Object>> result);
}
Run Code Online (Sandbox Code Playgroud)

在Eclipse中没有任何错误,但是IntelliJ拒绝使用编译类Incompatible types: Required: T Found: Object,唯一的方法是将返回值强制转换为T或返回Object,而我无法弄清楚它为什么失败。

Bla*_*nka 2

您需要添加类型参数向参数

\n\n
query(final Extractor<T> extractor, final List<Map<String, Object>> result){\n
Run Code Online (Sandbox Code Playgroud)\n\n

由于类型不匹配(原始类型。以下是文档中关于原始类型的说明:

\n\n
\n

原始类型出现在遗留代码中,因为许多 API 类(例如 Collections 类)在 JDK 5.0 之前不是通用的。当使用原始类型时,您本质上会获得预泛型行为 xe2x80x94 一个 Box(在您的案例列表中)为您提供对象。为了向后兼容,允许将参数化类型分配给\n其原始类型

\n
\n