我对Eclipse ecj和Oracle Javac编译器有不同意见 . 以下代码使用Javac编译,jdk8(1.8.0_131)和jdk9()预发布,但Eclipse 4.7与JDT 3.13.0.v20170612-0950报告错误:

import java.util.function.ToDoubleFunction;
import java.util.function.ToIntFunction;

public class Test {
    static class Generic<T> {
    }

    public static <T> String map(Generic<T> o, ToIntFunction<? super T> f) {
        return null;
    }

    public static <T> Number map(Generic<T> o, ToDoubleFunction<? super T> f) {
        return null;
    }

    private static int double2int(double x) {
        return 2;
    }

    public static void main(String[] args) {
        Generic<Double> oEmpty = new Generic<>();

        map(oEmpty, Test::double2int);
    }
}

方法映射(Test.Generic,ToIntFunction)对于类型Test Test.java / Playground / src / sandbox line 25问题是不明确的

我不太熟悉Java语言的重载解析细节 . double2int可分配给 ToIntFunctionToDoubleFunction ,所以直观地我可以看出为什么它可能是模棱两可的 . 但是,对 ToDoubleFunction 的赋值涉及从 int 结果到 double 的转换,所以我希望 ToIntFunction 是一个更好的匹配,并且歧义得到解决 .