对象
单例对象
Scala中没有静态方法或静态字段,你可以用Object这个语法来达到相同的目的。
object Account {
private var lastNumber = 0
def newUniqueNumber() = {
lastNumber += 1
lastNumber
}
}
对象的构造器在该对象第一次被使用时调用。
伴生对象
解决问题:当需要既有实例方法,又有静态方法的类。
class Account {
val id = Account.newUniqueNumber()
private var balance = 0.0
def deposit(amount: Double){balance += amoutn}
}
object Account{
private var lastNumber = 0
private def newUniqueNumber() = {lastNumber += ; lastNumber}
}
扩展类或特质的对象
一个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() {}
}
apply方法
我们通常会定义和使用对象的apply方法。当遇到如下形式的表达式时,apply方法会被调用:
Object(参数1, 参数2...参数N)
通常,apply方法返回的是伴生类的对象。
class Account private(val id: Int, initialBalance: Double) {
private var balance = initialBalance
...
}
objcet Account {
def apply(initialBalance: Double) =
new Account(newUniqueNumber(), initialBalance)
...
}
调用:
val acct = Account(100.0)
应用程序对象
object Hello {
def main(args: Array[String]) {
println("Hello, world!")
}
}
object Hello extends App {
println("Hello, world!")
}
枚举
代码示例:
object TrafficLightColor extends Enumeration {
val Red, Yellow, Green = Value
}