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,而我无法弄清楚它为什么失败。
您需要添加类型参数向参数
\n\nquery(final Extractor<T> extractor, final List<Map<String, Object>> result){\nRun Code Online (Sandbox Code Playgroud)\n\n由于类型不匹配(原始类型。以下是文档中关于原始类型的说明:
\n\n\n\n原始类型出现在遗留代码中,因为许多 API 类(例如 Collections 类)在 JDK 5.0 之前不是通用的。当使用原始类型时,您本质上会获得预泛型行为 xe2x80x94 一个 Box(在您的案例列表中)为您提供对象。为了向后兼容,允许将参数化类型分配给\n其原始类型
\n
| 归档时间: |
|
| 查看次数: |
4554 次 |
| 最近记录: |