参考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;
}
};
}
}解释:
以下例子(编译通不过):
本文探讨了Java 8中内部类使用外部类成员变量的变化,特别是对于final修饰符的要求调整。文中提供了两个示例,分别演示了在不同情况下内部类如何引用外部类的成员变量。
678

被折叠的 条评论
为什么被折叠?



