考虑以下课程:
public void method() {
test(() -> { });
}
void test(Runnable a) {
System.out.println("Test 1");
}
void test(A a) {
System.out.println("Test 2");
}
interface A extends Runnable {
}
调用方法method()
将导致Test 2
输出。这意味着,lambda表达式() -> { }
被隐式转换为A
。为什么呢?
答案 0 :(得分:7)
这是适用于所有重载的相同标准规则。 Java will choose the most specific applicable method.
两种方法都接受一个功能接口类型的参数。 lambda表达式
() -> { }
可以转换为这两种类型。 A
是Runnable
的子类,因此更具体。因此,选择参数类型为A
的方法。