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