终于明白为什么要加 final 关键字了!_Java
程序员的成长之路
互联网/程序员/成长/职场 

但是当你使用超过一种语言进行开发的时候就会发现,虽然都是高级语言,但是它们之间很多特性都是不太相同的。

在  Java 8 之前,匿名内部类在使用外部成员的时候,会报错并提示 “Cannot refer to a non-final variable arg inside an inner class defined in a different method”:

终于明白为什么要加 final 关键字了!_Java_02

可以看到,当试图修改基本数据类型的变量时,编译器的警告变成了 “Varible 'num' is accessed from within inner class, need to be final or effectively final”,很遗憾,仍然不能修改。相比之下,Kotlin 是没有这个限制的:

终于明白为什么要加 final 关键字了!_Java_03

从表面上当然看不出什么原因,看看编译器做了什么工作吧!运行 javac 命令后生成了几个 .class 文件:

终于明白为什么要加 final 关键字了!_final_04

查看 Kotlin 编译后反编译回来的内容:

终于明白为什么要加 final 关键字了!_Java_05

哈哈,并没有多此一举!

 

 

写留言