我在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问题
我不太熟悉Java语言的重载解析细节。 double2int可分配给ToIntFunction
和ToDoubleFunction
,所以直观地我可以看出为什么它可能是模棱两可的。但是,对ToDoubleFunction
的分配涉及从int
结果转换为double
,因此我希望ToIntFunction
更好地匹配并解决歧义。