And*_*niy 3 java lambda overloading type-conversion java-8
考虑以下课程:
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 {
}
Run Code Online (Sandbox Code Playgroud)
调用方法method()将导致Test 2输出.这意味着,lambda表达式() -> { }被隐式转换为A.为什么?
这是适用于所有重载的相同标准规则.Java将选择最具体的适用方法.
两种方法都接受一个功能接口类型的参数.lambda表达式
() -> { }
Run Code Online (Sandbox Code Playgroud)
可转换为这两种类型.A是一个子类,Runnable因此更具体.A因此,选择具有参数类型的方法.
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |