java 匿名内部类的参数为什么不是final也不会编译出错

macjian 2016-06-01 05:34:23
interface Destination {
}
public class Final_field {
public Destination dest(String dest) {
return new Destination() {
private String label = dest;

public String readLabel() {
return label;
}
};
}
public static void main(String[] args) {
Final_field f = new Final_field();
Destination d = f.dest("helloworld");
}
}
这是Thinking in javaP198页的源例子,书上说dest方法的参数要加final,但是我没加为什么不会出错,可以编译通过
...全文
214 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
macjian 2016-06-21
  • 打赏
  • 举报
回复
引用 5 楼 monkeyqqqq 的回复:
jdk8 新特性 引入了 effective final 这么个东西 如果你的变量值没有被改变过 编译器会自动给你加上final 如果被改变过就会报错
5楼正解
狂暴的小猴儿 2016-06-02
  • 打赏
  • 举报
回复
引用 5 楼 monkeyqqqq 的回复:
jdk8 新特性 引入了 effective final 这么个东西 如果你的变量值没有被改变过 编译器会自动给你加上final 如果被改变过就会报错
链接 http://docs.oracle.com/javase/tutorial/java/javaOO/localclasses.html#accessing-members-of-an-enclosing-class
狂暴的小猴儿 2016-06-02
  • 打赏
  • 举报
回复


jdk8 新特性 引入了 effective final 这么个东西 如果你的变量值没有被改变过 编译器会自动给你加上final 如果被改变过就会报错
qq_15915835 2016-06-02
  • 打赏
  • 举报
回复
引用 2 楼 dgqjava 的回复:
jdk8新特性
这个不是。jdk8那个特性是直接可以在interface里面写方法。楼主这里定义了一个类。
爱睡觉的阿狸 2016-06-02
  • 打赏
  • 举报
回复
Thinking in java第四版我记得没错的话讲的是jdk1.5,而你可能用的是java8,所以有这个新特性,
dgqjava 2016-06-01
  • 打赏
  • 举报
回复
jdk8新特性
qq_15915835 2016-06-01
  • 打赏
  • 举报
回复
方法上加final 只是让这个方法不能重写而已。

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧