众所周知,Scala 是运行于Java平台(Java虚拟机)的,那么Scala程序编译之后会生成对应的字节码文件,我们将字节码文件反编译成Java文件即可知Scala 为我们都做了什么.
首先我们有一个Scala 源文件
//Scala源代码 class Test3 { val a = "a" var b = "b" private val c = "c" private var d = "d" private[this] val e = "e" private[this] var f = "f" @BeanProperty var g = "g" @BeanProperty val h = "h" }
那么接下来我们看看这些属性在反编译成JAVA源代码Scala都帮我们做了什么
//反编译后的代码 public class Test3 { private final String a = "a"; private String b = "b"; private final String c = "c"; private String d = "d"; private final String e = "e"; private String f = "f"; @BeanProperty private String g = "g"; @BeanProperty private final String h = "h"; public String a() { return this.a; } public String b() { return this.b; } public void b_$eq(String x$1) { this.b = x$1; } private String c() { return this.c; } private String d() { return this.d; } private void d_$eq(String x$1) { this.d = x$1; } public String g() {return this.g; } public void g_$eq(String x$1) { this.g = x$1; } public String h() { return this.h; } public String getG(){return g(); } public String getH() { return h(); } public void setG(String x$1){g_$eq(x$1);} }
总结下:
Scala字段 生成的方法 val/var name 公共的name name_ 方法(仅限于var) prviate val/var name 私有的name name_ 方法(仅限于var) prviate[this] val/var name 无 @BeanProperty val/var name 公共的name getName() name_ setName(…)(仅限于var)