Ambigous方法调用即使它是不明确的

时间:2018-06-03 20:55:55

标签: java methods ambiguous

我有Oracle-Java版本1.8.0_171

我的代码:

public void test() {
    run(x -> "1");                         // calls run(Function)
    run(x -> System.out.println("test"));  // fails to compile
    run(() -> System.out.println("test")); // calls run(Runnable)
    run(() -> "1");                        // calls run(Supplier)
}

void run(Consumer<Integer> c) {
    System.out.println("Consumer");
}

void run(Function<Integer, String> f) {
    System.out.println("Function");
}

void run(Supplier<String> s) {
    System.out.println("Supplier");
}

void run(Runnable r) {
    System.out.println("Runnable");
}

编译器应该能够识别出void不符合String 然而,即使使用javac,它也无法编译test()的第二行,我得到:

both method run(Consumer<Integer>) in Test and method  
run(Function<Integer,String>) in Test match

test()的第一行和最后两行编译正常,即使它应该是同一个问题。

这是什么问题?我希望我的库用户能够将任何lambda(Function,Consumer,Supplier,Runnable)传递给run方法,而不必使用“丑陋”的语法。

0 个答案:

没有答案