object Accounts {
private var lastNumber = 0
def newUniqueNumber() = { lastNumber += 1; lastNumber }
}
对象的构造器在该对象第一次被使用时调用。
scala对象可以用来实现:
- 存放工具函数或常量
- 共享单个不可变实例
- 需要用单个实例协调某个服务
class Account {
val id = Account.newUniqueNumber()
private var balance = 0.0
def deposit(amount: Double) { balance += amount }
def description = "Account " + id + " with balance " + balance
}
object Account { // 伴生对象
private var lastNumber = 0
private def newUniqueNumber() = { lastNumber += 1; lastNumber }
}
val acct1 = new Account
val acct2 = new Account
acct1.deposit(1000)
val d1 = acct1.description
val d2 = acct2.description
总结:个人理解,scala中引入object就是为了解决没有静态变量或静态方法的问题。
abstract class UndoableAction(val description: String) {
def undo(): Unit
def redo(): Unit
}
object DoNothingAction extends UndoableAction("Do nothing") {
override def undo() {}
override def redo() {}
}
val actions = Map("open" -> DoNothingAction, "save" -> DoNothingAction)
actions("open") == actions("save")
class Account private (val id: Int, initialBalance: Double) {
private var balance = initialBalance
def deposit(amount: Double) { balance += amount }
def description = "Account " + id + " with balance " + balance
}
object Account { // The companion object
def apply(initialBalance: Double) =
new Account(newUniqueNumber(), initialBalance)
private var lastNumber = 0
private def newUniqueNumber() = { lastNumber += 1; lastNumber }
}
val acct = Account(1000.0)
val d = acct.description
object Hello {
def main(args: Array[String]) {
println("Hello, World!")
}
}
object TrafficLightColor extends Enumeration {
val Red, Yellow, Green = Value
}
TrafficLightColor.Red
TrafficLightColor.Red.id
object TrafficLightColor extends Enumeration {
val Red = Value(0, "Stop")
val Yellow = Value(10) // Name "Yellow"
val Green = Value("Go") // ID 11
}
Value中可以不传值,可以传入ID、名称。
枚举的ID可以通过id方法返回,名称通过toString方法返回。
【待续】
内容来源于网络,如有侵权,请联系作者删除!