我对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可分配给 ToIntFunction
和 ToDoubleFunction
,所以直观地我可以看出为什么它可能是模棱两可的 . 但是,对 ToDoubleFunction
的赋值涉及从 int
结果到 double
的转换,所以我希望 ToIntFunction
是一个更好的匹配,并且歧义得到解决 .