java编译器将Function <Double,Integer>转换为DoubleToIntFunction吗?

Ame*_*kar 0 java java-8 functional-interface javacompiler

Function<Double,Integer> f1=(d)-> {
        if(d>5)
            return 0;
        return 1;
    };
DoubleToIntFunction f2=(d)-> {
        if(d>5)
            return 1;
        return 0;
    };
double d=5.0;
f1.apply(d);
f2.applyAsInt(d);
Run Code Online (Sandbox Code Playgroud)

将f1优化为DoubleToIntFunction(有些像f2).

Rau*_*orn 6

我不知道它怎么可能,上面的lambda允许空值,而下面的lambda不允许空值.编译器必须进行大量的静态代码分析,以查看是否可以将null传递给Function以优化它.

f1.apply(null); //works!
f2.applyAsInt(null); //won't compile!
Run Code Online (Sandbox Code Playgroud)