Ste*_*ven 4 java lambda java-8 method-reference
你能解释为什么第一个lambda正在捕获而第二个没有捕获.
Runnable createLambdaWithCapture() {
return System.out::println;
}
Runnable createLambdaWithApparentCapture() {
return () -> System.out.println();
}
Run Code Online (Sandbox Code Playgroud)
第一个片段正在捕获,因为它会评估语句System.out何时return执行,并捕获要在其Runnable#run实现中使用的相应对象引用.
第二个片段生成一个Runnable未捕获的实例,因为System.out只有run在调用该实例的方法时才会对其进行评估.自return语句执行以来,它可能已经发生了变化.
| 归档时间: |
|
| 查看次数: |
207 次 |
| 最近记录: |