lambda表达式的隐式类型转换

时间:2015-04-02 15:24:04

标签: java lambda type-conversion java-8 overloading

考虑以下课程:

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。为什么呢?

1 个答案:

答案 0 :(得分:7)

这是适用于所有重载的相同标准规则。 Java will choose the most specific applicable method.

两种方法都接受一个功能接口类型的参数。 lambda表达式

() -> { }

可以转换为这两种类型。 ARunnable的子类,因此更具体。因此,选择参数类型为A的方法。