当引用Function :: andThen时,Intellij IDEA无法解析'andThen'功能接口方法

时间:2015-11-18 15:59:21

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

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

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

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

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.and然后,静态代码分析器不会抱怨。它只发生在我引用Function :: andThen。

使用eclipse时这不是问题。或者,再次,从命令行编译,或转到项目 - &gt;使

1 个答案:

答案 0 :(得分:6)

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

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

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