我們在用Java的時候經常把一些字段定義為private類型來完成封裝,這樣外界就無法訪問。
如果外界訪問或者修改該字段的時候,只能通過該字段提供的getter和setter方法來實現。
在Scala中是沒有getter和setter一說的。
用了value 和 value_= 來分別代替了getter和setter。
下面我們看個例子
class Counter{ private var privateValue = 0;//私有變量,外界無法直接訪問 def value = privateValue;//定義一個方法,方法名為我們想要的字段的名稱,代替getter def value_= ( newValue : Int ){//主語 value_= 是方法名字 value = newValue; } //注意,scala中默認方法是public的 } object MyCounter{ def main(args :Array[String]){ val myCounter = new Counter; println(myCounter.value);//調用value方法訪問value,相當於getter myCounter.value = 3 ;//為value設置新值,相當於setter } }
注意,這里的value不是唯一名字,可以用別的名字。
def age = privateAge; def age_= (newAge :Int){ age = newAge;}
myAge.age;//訪問age myAge = 3;//設置age為3
其實Scala是對每個字段自動生成getter和setter方法的,不過你可以控制這個過程如下:
■ 如果字段是私有的,則getter和setter方法也是私有的
就是說明,當我們定義一個字段為私有的時候,自動生成的getter和setter也不能被外界使用了。
就是我們不能在外界使用 點+字段 的方式來訪問或者修改該字段了。
我們可以通過自己改寫scala的getter和setter來完成對私有變量的訪問和修改,如上述。
■ 如果字段是val,則只有getter方法被生成
當我們需要getter和setter的時候,可以定義變量為var
當我們只需要getter不需要setter的時候,我們可以定義變量為val
■ 如果你不需要任何getter或setter,可以將字段聲明為private[this]