gst*_*low 19 java java-8 method-reference constructor-reference
我学习了Java 8的新功能.
我正在玩不同的例子,我发现了一个奇怪的行为:
public static void main(String[] args) {
method(Test::new);
}
static class Test{
}
private static void method(Supplier<Test> testSupplier){
Test test = testSupplier.get();
}
Run Code Online (Sandbox Code Playgroud)
这段代码编译成功,但我不知道它是如何工作的.
为什么可以Test::new接受供应商?
供应商界面看起来很简单:
@FunctionalInterface
public interface Supplier<T> {
T get();
}
Run Code Online (Sandbox Code Playgroud)
Tun*_*aki 19
该Supplier接口具有单一(功能)方法:
因此,任何符合这两点的方法,都符合功能契约Supplier(因为方法会有相同的签名).
这里,所讨论的方法是方法参考.它不需要参数并返回一个新的实例Test.您可以将其重写为:
method(() -> new Test());
Run Code Online (Sandbox Code Playgroud)
Test::new 在这个lambda表达式的语法糖中.
| 归档时间: |
|
| 查看次数: |
2774 次 |
| 最近记录: |