java8之新特性Lambda表達式--作用域之final


Lambda作用域:

在Lambda表達式中訪問外層作用域和老版本的匿名對象中的方式很相似。可以直接訪問標記了final的外層局部變量,或者實例的字段以及靜態變量。但是如果訪問局部變量,要求局部變量必須是final修飾的。

注意:上面代碼中,一旦匿名內部類中使用了i,則i會自動被編排為final的。

首先我們來看下使用匿名內部類是如何實現的:

package com.test.cgb;

public class CryptonymInnerTest {
	public static void main(String[] args) {	
		int i = 9;
		// 
		CryptonymInnerInterface m1 = new CryptonymInnerInterface() {
			@Override
			public int sum(int num1 , int num2) {
				System.out.println(i);
				return num1 + num2;
			}
		};
		m1.sum(123, 456);
	}
}
打印結果為9

  如何證明i是被final修飾的:

 

 下面使用Lambda表達式實現如下:

public class CryptonymInnerTest {
	public static void main(String[] args) {
// 使用Lambda表達式
		int i = 9;
		CryptonymInnerInterface m1 = (num1, num2) -> {
			System.out.println(i);
			return num1 + num2;
		};
		m1.sum(123, 456);
}
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM