scala學習手記16 – scala中的static


前面兩節學了scala的對象和伴生對象,這兩個在使用的時候很有些java的靜態成員的意思。

scala中沒有靜態字段和靜態方法。靜態成員會破壞scala所支持的完整的面向對象模型。不過可以通過伴生對象實現對scala的類一級的操作。

回過頭來再看一遍那個Marker的例子,略做了一些調整:

class Marker private(val color: String) {
  println("Creating " + this)

  override def toString(): String = "marker color " + color
}

object Marker {
  private val markers = Map("red" -> new Marker("red"),
    "blue" -> new Marker("blue"),
    "green" -> new Marker("green"))

  def primaryColors = "red, green, blue"

  def apply(color: String) = if (markers.contains(color)) markers(color) else null
}

println("Primary colors are : " + Marker.primaryColors)
println(Marker("blue"))
println(Marker("red"))

在調整后的代碼里,使用def關鍵字為Marker對象聲明了一個primaryColors方法,這個方法返回了一個字符串“red, green, blue”(如果沒有參數的話,方法中的括號是可以省略的,而且return也是可以省略的)。調用這個方法的方式就跟在Java中調用靜態方法一樣。

使用伴生對象還有另外一點好處:可以不使用new關鍵字就能創建伴生類的實例。這里主要依賴了apply方法,它是scala提供的語法糖。上面的代碼在調用Marker(“blue”)的時候,其實就是在調用Marker.apply(“blue”)。通過這樣的方法可以讓實例的創建和獲取更加容易。

來看一下這個方法的執行結果:

image


免責聲明!

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



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