【问题标题】:Implicit type conversion for lambda expressionlambda 表达式的隐式类型转换
【发布时间】:2015-06-07 15:03:04
【问题描述】:

考虑以下类:

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

【问题讨论】:

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


    【解决方案1】:

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

    这两个方法都接受一个函数接口类型的参数。 lambda 表达式

    () -> { }
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多