java8的Effectively final

参考java官方文档:http://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html#accessing-members-of-an-enclosing-class

在以前的java版本中匿名内部类的参数必须是final的,原因在于保证内部和外部类的数据一致性。因为编译的时候内部类和方法在同一级别上,所以方法中的变量或参数只有为final,内部类才可以引用。然而java8中不加final,也可以通过编译,在以前的版本中是不允许的。

以下例子(编译通过):

public interface Destination {
	int readLabel();
}
public class Parcel9 {
	static int test = 5; 
	public static void main(String[] args) {
		Parcel9 p = new Parcel9();
		Destination d = p.destination(test);
		d.readLabel();
	}
	
	public Destination destination(int dest) {
		return new Destination() {
			private int label = dest;
			
			@Override
			public int readLabel() {
				System.out.println(label);
				return label;
				
			}
		};
	}
}
解释:



以下例子(编译通不过):


阅读更多
文章标签: Effectively final
个人分类: Java开发
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭