您的位置:首页 > 其它

Step into Scala - 12 - 对象与枚举

2015-05-02 23:54 162 查看
目录

对象与枚举
对象
单例对象

伴生对象

扩展类的对象

应用程序对象

枚举

摘要

静态方法,单例对象使用及作用,伴生对象,扩展类的对象,应用程序对象,枚举

对象与枚举

对象

单例对象

与类不同,单例对象使用
object
进行声明

Scala 没有静态属性和方法,需要使用单例对象来实现类似的功能。

对象的构造器不能提供构造器参数,在第一次使用时会被初始化。

object Singleton {
private var num = 0

def sequence() = {
num += 1
num
}
}

Singleton.sequence()


单例对象可以用于提供常量及共享不可变对象。

伴生对象

单例对象和类可以拥有相同名字,此时也称此单例对象为伴生对象。

伴生对象可以用于让一个类即拥有实例化方法又有静态方法。

伴生对象必须与同名类位于同一源文件中。

伴生对象与类可以互相访问各自的私有成员。

class Companion(private var balance: Int = 0) {
val id = Companion.sequence() //访问伴生对象的私有方法
}

object Companion {
private var num = 0

private def sequence(): Int = {
num += 1
num
}

def getInfo(comp: Companion): String = {
"balance is " + comp.balance    //访问类的私有属性
}
}


扩展类的对象

可用于实现类的可共享的默认对象

基类

abstract class UndoableAction(val description: String) {
def undo

def redo
}


扩展对象

object DoNothing extends UndoableAction("Do nothing") {

override def undo: Unit = ???

override def redo: Unit = ???
}

//使用默认对象
val actions = Map("open" -> DoNothing, "save" -> DoNothing)


应用程序对象

应用程序对象即对象拥有
main()
方法或继承
App
类。该对象是一个应用的入口,可以通过
args
获得命令行参数。

object Hello extends App {

println("Hello World")

if (args.length > 0) {
println("args:" + args(0))
} else {
println("no args")
}
}


枚举

Scala 并没有枚举类型,而是通过对象继承
Enumeration
类实现枚举功能。

每次调用
Value
方法时都会自动生成一个枚举实例。
Value
构造器为
()
,
(id, name)
(name)


构造枚举

object TrafficColor extends Enumeration {

val RED = Value(0, "stop")
val YELLOW = Value(10)
val GREEN = Value("go")
val BLUE = Value
}


使用枚举

//直接获得枚举
var red = TrafficColor.RED

//通过索引获得枚举
red = TrafficColor(0)

//通过 name 获得枚举
red = TrafficColor.withName("stop")

red.toString    //返回  name
red.id  //返回 id
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: