我有两个与这些类似的功能:
public static <In extends Number, Out extends Number> Out test(In in, Function<In, Out> f) {
Out x = f.apply(in);
return test(in, x);
}
public static <In extends Number, Out extends Number> Out test(In in, Out out) {
return out;
}
Run Code Online (Sandbox Code Playgroud)
对我来说很明显,他们不能(!)发生冲突,并且呼叫不能模棱两可.但是,对于最新版本的Java 8,以下调用失败:
Test.test(2, Integer::new);
Run Code Online (Sandbox Code Playgroud)
同 Error:(17, 16) java: reference to test is ambiguous
both method <In,Out>test(In,java.util.function.Function<In,Out>) in org.test and method <In,Out>test(In,Out) in org.test match
而
Test.test(2, new Function<Integer, Number>() {
@Override
public Number apply(Integer integer) {
return 10;
} …Run Code Online (Sandbox Code Playgroud)