该代码来自Thinking in Java。我不知道为什么我必须在这里添加final
语法。我删除了final
,程序仍在编译。但是,这本书说我必须添加它。
// initialization. A briefer version of Parcel5.java.
public class Parcel9 {
// Argument must be final to use inside
// anonymous inner class:
public Destination destination(final String dest) {
return new Destination() {
private String label = dest;
public String readLabel() { return label; }
};
}
public static void main(String[] args) {
Parcel9 p = new Parcel9();
Destination d = p.destination("Tasmania");
}
} ///:~
[这本书(或章节)很可能是在Java 8时代之前写的。
Java对匿名类施加了限制,除非它是最终的,否则它不能访问局部变量。
在Java 8中,该限制也适用于lambda表达式。但是,除此之外,Java 8还添加了[[finally final的概念,这使编译器由于未在本地重新分配变量而检测到该变量是最终变量,从而使之更加智能。在这种情况下,final
关键字是可选的。