【scala】getter和setter


我們在用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]

我們要么在對私有變量設置訪問方法的時候

要么加上getter方法(對val字段而言)要么加上getter和setter方法(對var字段而言)

但在Scala中,你不能實現只寫屬性,即帶有setter但不帶getter的屬性。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM