编程思想第4版中有如下示例:
public interface Destination {
String readLabel();
} ///:~
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");
}
} ///:~
书中说道:如果定义一个匿名内部类,并且希望它使用一个在其外部定义的对象,那么编译器会要求 其参数引用是final的,如果你忘记了,将会得到一个编译时错误消息。
可是当我将上列中的final删除了,并没有如上所说得到一个编译时错误消息,并且顺利运行了。这是为什么?
------解决思路----------------------
你用的是JDK1.8?这好像是1.8的新特性,对于不会被修改的参数会在编译时自动视为final