众所周知,Scala 是运行于Java平台(Java虚拟机)的,那么Scala程序编译之后会生成对应的字节码文件,我们将字节码文件反编译成Java文件即可知Scala 为我们都做了什么.
Scala 源代码
class Test4(a: String) class Test5(val b: String, var c: String) class Test6(private val d: String, private var e: String) class Test7(private[this] val f: String, private[this] var g: String) class Test8(@BeanProperty val f: String, @BeanProperty var g: String) //貌似这种写法没有什么用 class Test9(@BeanProperty private[this] val f: String, @BeanProperty private[this] var g: String)
反编译后的Java代码
public class Test4 { public Test4(String a) { } } public class Test5 { private final String b; private String c; public String b(){return this.b; } public String c() { return this.c; } public void c_$eq(String x$1) { this.c = x$1; } public Test5(String b, String c) { } } public class Test6 { private final String d; private String e; private String d(){return this.d; } private String e() { return this.e; } private void e_$eq(String x$1) { this.e = x$1; } public Test6(String d, String e) { } } public class Test7 { public Test7(String f, String g) { } } public class Test8 { private final String f; private String g; public String f(){return this.f; } public String g() { return this.g; } public void g_$eq(String x$1) { this.g = x$1; } public String getF() { return f(); } public String getG() { return g(); } public void setG(String x$1) { g_$eq(x$1); } public Test8(@BeanProperty String f, @BeanProperty String g) { } } public class Test9 { public Test9(@BeanProperty String f, @BeanProperty String g) { } }
总结
主构造器参数 | 生成的字段 | 生成的方法 |
---|---|---|
name:String | 不生成任何字段 | 不生成任何方法 |
val/var name:String | 私有字段 | 公共的getter/setter方法 |
private val/var name:String | 私有字段 | 私有的getter/setter方法 |
private[this] val/var name:String | 不生成任何字段 | 不生成任何方法 |
@BeanProperty val/var name:String | 私有字段 | 公共的Scala版和JavaBean版的 getter/setter方法 |
@BeanProperty private[this] val/var name:String | 不生成任何字段 | 不生成任何方法 |