【问题标题】:Intellij IDEA cannot resolve 'andThen' functional interface method when referenced Function::andThenIntellij IDEA 在引用 Function::andThen 时无法解析“andThen”功能接口方法
【发布时间】:2015-11-18 15:59:20
【问题描述】:

当使用符号 Funciton::andThen 时,如何让 IntellijIDEA 找到核心 java 8 'Function' 接口的 'andThen' 方法?我尝试了很多事情都没有成功。

我的 intellijIDEA 模块配置为 java 8,使用的 sdk 是 oracle java 8,我已经使缓存无效,并尝试了其他一些方法,但编辑器仍然标记然后为:“无法解析方法'andThen' ”。

我可以启动和构建这个示例,所以我认为它与静态代码分析器有关。也许是一个错误?

package foo.bar;

import java.util.ArrayList;
import java.util.List;
import java.util.function.Function;

public class Meh {


    public static void main(String... args) {


        final List<Function<String, String>> fs = new ArrayList<>();
        fs.add(s -> s + "1");
        fs.add(s -> s + "2");

        final Function<String, String> f =
                fs.stream()
                        //copmiles from cli and project->make, but editor shows: Cannot resolve method 'andThen'
                        .reduce(Function::andThen)
                        .get();

        System.out.println(f.apply(""));//succesfully prints 12

        final Function<String,String> f2 = f.andThen(s-> s+"a");

        //succesfully prints 12a
        System.out.println(f2.apply(""));


    }

}

有趣的是,当我引用 f.andThen 时,静态代码分析器不会报错。只有当我引用 Function::andThen 时才会发生这种情况。

在使用 eclipse 时这不是问题。或者,当从命令行编译时,或者去项目 -> make

【问题讨论】:

    标签: java intellij-idea functional-programming java-8


    【解决方案1】:

    这似乎在 IntelliJ 15.0.2 中已修复,在 15.0.1 中我可以重现此错误标记。

    release notes 的“Java.Error Highlighting”部分中提到了一些听起来像您的问题的错误,例如:

    • IDEA-146604 (Bug) 有效代码突出显示为错误 (Enum::compareTo)
    • IDEA-147873(错误)用 lambdas/方法引用标记为红色的好代码

    【讨论】:

    • 15.0.2 还不是 GA(发布),对吧?我无法在常规下载页面中找到它:jetbrains.com/idea/download
    • @portenez 你完全正确,对不起!我得到了更新信息,甚至没有意识到它只在 EAP 中......但由于这是一个小更新,我希望他们很快就会发布它 - 包括针对您的问题的修复!
    • 我会留意下一个版本。同时,有一个马马虎虎的解决方法:动态创建一个 lambda,然后在 lambda 中调用 andThen。 IDEA 不会那样抱怨的。
    • @portenez 15.0.2 似乎已经发布了,你可以在jetbrains.com/idea/download获取它
    • 是的,不再可重现。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-07
    • 2020-10-22
    • 2021-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多