scala学习笔记-对象

来源:互联网 发布:java应聘简历表格 编辑:程序博客网 时间:2024/05/22 08:21

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

}


原创粉丝点击