【问题标题】:Bypass IntelliJ false errors with Stream.of使用 Stream.of 绕过 IntelliJ 错误错误
【发布时间】:2016-05-13 01:00:17
【问题描述】:

这是 IntelliJ (16, 144.3357.4) 软件中的一个错误,我想知道如何在等待修复时暂时绕过它。出于向后兼容性的原因,我正在构建一个使用retrolambdaannimon 流API 的跨平台应用程序。但是,如果我切换到 Java 1.8+ 并删除这些包,就会产生这个错误。

我不能再使用 Stream.of(...some Iterable...) 而不会遇到许多此类错误错误:

Both:
List<? extends T> in Stream and
Iterable<? extends T> in Stream match

我可以确认我只导入了 annimon Stream 类——没有来自 Java API 的混合导入,当我切换到 Java 1.8+ 时也是如此。如果我通过字节码反编译进入源代码,我确实会看到具有(可能)相同擦除的方法:

public static <T> Stream<T> of(final List<? extends T> list)
public static <T> Stream<T> of(Iterable<? extends T> iterable)

强制转换我的对象可以解决错误,但会导致无法解析的代码和对Stream.of 的冗长调用。我还应该注意,这只是自最新版本以来的一个问题。显然,问题在于 List 也实现了 Iterable,所以它无法决定我想要哪种方法。

有没有办法在不进行类型转换的情况下解决或抑制这些错误?

我知道我可以降级到早期版本,但我想知道是否有更简单的修复方法。

【问题讨论】:

  • 您使用的是什么版本的 Intellij?
  • 已添加@ChiefTwoPencils。
  • 我认为这是一个 EAP;正确的?这可能是一个很大的可能性。您也许可以在 JetBrains 网站上获得进度报告。
  • 是的,我搜索过,但没有运气。

标签: java intellij-idea java-stream


【解决方案1】:

这个问题在今天早上推送的更新中得到了解决:
IntelliJ IDEA(社区版)IC-144.3600.7
Build #IC-144.3600,于 2016 年 2 月 2 日构建

【讨论】:

    【解决方案2】:

    如果错误仅显示在编辑器中,而不是在您制作项目时在消息工具窗口中显示,您可以忽略它,您的项目仍然会构建和运行。

    【讨论】:

    • 你说“你可以忽略它”,但这是一个大型项目中普遍存在的错误,我无法再分辨哪些文件包含合法错误。
    • 是的,这样不太方便。我只是想我会为遇到此类问题的其他人提及它。
    猜你喜欢
    • 2012-12-20
    • 1970-01-01
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    相关资源
    最近更新 更多