Scala 類中屬性和屬性生成的方法的區別
阿新 • • 發佈:2019-02-09
眾所周知,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
那麼接下來我們看看這些屬性在反編譯成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"
總結下:
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)