Scala沒有靜態方法或靜態字段,可使用object這個語法達到相同的目的,對象定義了某個類的單個實例java
object Accounts { private var lastNumber = 0 /** * 定義一個getNumber的方法 * * @return */ def getNumber(): Int = { lastNumber += 1 lastNumber } def main(args: Array[String]): Unit = { // 至關於java靜態方法調用 println(Accounts.getNumber()) }
在java中,一般會出現一個類即有實例方法又有靜態方法的類,在Scala中可使用類和同名的伴生對象達到相同的目的app
class Account { // 實例方法 ...... } object Account { // 靜態方法 ...... }
類和它的伴生對象能夠相互訪問私有特性,但前提是它們都在同一個源文件中ide
abstract class UndoableAction(val description: String) { def undo(): Unit def redo(): Unit } object DoNothing extends UndoableAction("Do nothing") { override def undo() {} } // 打開和保存功能還沒有實現 val actions = Map("open" -> DoNothing,"save" -> DoNothing)
一般一個apply方法返回的是伴生類對象 Array("Mary","had","little") Array(100) 和new Array(100) 二者是不一樣的概念,前一個表達式調用的是apply(100),輸出一個單元素整數100的Array[Int],而第二個表達式調用的是this(100),包含了100個null元素 如下是apply方法的示例 class Account private (val id:Int,initialBalance:Double){ ...... } // 伴生對象 object Account { def apply(initialBalance:Double) = { new Account(1,initialBalance) } }