ECJ和Javac之间在重载决策上的分歧与原始类型的功能接口

时间:2017-08-07 12:11:42

标签: java eclipse overloading overload-resolution

我在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可分配给ToIntFunctionToDoubleFunction,所以直观地我可以看出为什么它可能是模棱两可的。但是,对ToDoubleFunction的分配涉及从int结果转换为double,因此我希望ToIntFunction更好地匹配并解决歧义。

0 个答案:

没有答案