1. 单例对象
Scala没有静态方法或者静态字段,可以用object这个语法结构来达到同样目的。对象定义了某个类的单个实例,包含了你想要的特性:
object Account{
private var lastNumber =0
def newUniqueNumber() = { lastNumber+ =1; lastNumber}
}
当你在应用程序中需要一个新的唯一账号时,调用Account.newUniqueNumber() 即可
2. 伴生对象
在Java中,通常会既有实例方法又有静态方法的类。在Scala中,可以通过类和与类同名的伴生对象来达到同样目的:
class Account {
var id= Account.newUniqueNumber()
private var balance = 0.0
def deposit( account : Double) { balance+=amount }
}
object Account{ //伴生对象
private var lastNumber =0
def newUniqueNumber() = { lastNumber+ =1; lastNumber}
}
类和它的伴生对象可以相互访问私有特性。它们必须存在于同一个源文件中。
3. 扩展类或特质的对象
一个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(){}
}
4. apply方法
通常会定义和使用对象的apply方法。当遇到如下形式的表达式时,apply方法就会被调用:
Object (参数1,...,参数n)
通常,这样一个apply方法返回的是伴生类的对象
5. 应用程序对象
每个scala程序都必须从一个对象的main方法开始,这个方法的类型为 Array[String]=>Unit:
object Hello{
def main(args:Array[String]) {
}
}
6. 枚举
scala没有枚举类型,但标准类库提供了一个Enumeration助手类,可以用于产出枚举
定义一个扩展Enumeration类的对象并以value方法调用初始化枚举中的所有可选值。例如:
object Color extends Enumeration{
val RED,YELLOW,GREEN=Value
}