天天看點

scala通路java靜态方法_Scala的靜态方法和執行個體方法

Scala的對象學習

Scala沒有靜态方法或靜态字段,可以使用object這個文法達到相同的目的,對象定義了某個類的單個執行個體

object Accounts {

private var lastNumber = 0

def getNumber(): Int = {

lastNumber += 1

lastNumber

}

def main(args: Array[String]): Unit = {

// 相當于java靜态方法調用

println(Accounts.getNumber())

}

在java中,通常會出現一個類即有執行個體方法又有靜态方法的類,在Scala中可以使用類和同名的伴生對象達到相同的目的

class Account {

// 執行個體方法

......

}

object Account {

// 靜态方法

......

}

類和它的伴生對象可以互相通路私有特性,但前提是它們都在同一個源檔案中

抽象類

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方法

通常一個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)

}

}