十六、枚举
scala没有枚举类型。scala提供了一个叫做Enumeration的抽象类,可以通过继承该类实现类似于枚举功能。
scala中枚举示例:
object Color extends Enumeration{
case class Val(val name:String, val code:Int) extends super.Val
val YELLOW = Val("yellow", 1)
val RED = Val("red", 2)
val GREEN = Val("green", 3)
}
上面示例虽然可以让scala实现类似枚举类的功能,但是与java还是有所不同,在java中枚举项的类型均是枚举类的类型,但是scala却无法实现这样的特征,因为scala的枚举类要实现类似java的枚举类使用方式,其枚举类型一定要是object,而object确切的说应该是对象而不是类型。当然由于scala没有提供枚举类型,因此实现枚举的类似功能有多种方式,但是最贴近java的用法的还是上面例子的实现方式。
十七、构造方法
我在第一章中已经介绍过scala的构造方法,这里详细介绍其定义语法。
在scala定义一个class时,其class名称后可以有一个参数列表的,如果没有参数的话,参数列表可以省略,类名一起定义的构造方法就是主要构造方法,或者说是基本构造方法。在scala的类体中可以定义多个辅助构造方法,但是这些构造方法的方法体中必须要显示调用主构造方法或者其他辅助构造方法。
scala的class的构造方法示例:
class B (val s : String = "b"){
var num:Int = -1
def this() = {
this("test")
}
def this(i:Int) = {
this()
this.num = i
}
def this(s:String, i:Int) = {
this(s)
this.num = i
}
}
scala的主构造方法的参数是有var或val修饰符的,如果省略了默认是val的,但是省略后的参数只能class内部能够访问到,外部引用是无法访问的。
scala的辅助构造方法的参数是不能有val