单例对象
Scala没有静态方法或静态字段,你可以用object这个语法结构来达到同样目的,
object HelloWorld {
private var lastNumber = 0
def newUniqueNumber()={lastNumber+=1;lastNumber}
}
使用的时候直接调用HelloWorld.newUniqueNumber()即可。对象的构造器在该对象第一次被使用时调用,如果一个对象从未被使用,那么其构造器也不会被执行。在Scala中用对象可以来实现:
- 作为存放工具函数或常量的地方
- 高效地共享单个不可变实例
- 需要用单个实例来协调某个服务时
类和它的伴生对象可以相互访问私有特性,它们必须存在于同一个源文件中。调用方式:Account.newUniqueNumber()来调用伴生对象的方法
class Account{
}
object Account{//伴生对象
private var lastNumber = 0
private def newUniqueNumber()={lastNumber+=1;lastNumber}
}
|
apply方法
当Object(参数1,...,参数N),通常这样一个apply方法返回的是伴生类的对象。Array(100)和new Array(100)很容易搞混。前一个调用的是apply(100),输出一个单元素的Array[Int],而第二个调用的是构造器this(100),结果是Array[Nothing],它包含了100个null元素。
应用程序对象
每个Scala程序都必须从一个对象的main方法开始,方法类型为Array[String]=>Unit:
object Hello{
def main(args : Array[String]){
println()
}
}
|
除了每次都提供自己的main方法外,你也可以扩展App特质,然后将程序代码放进构造器方法体内:
object Hello extends App{
def main(args : Array[String]){
println()
}
}
|
Enumeration
object MyEnum extends Enumeration {
//定义三个字段,然后用Value调用将它们初始化,每次调用Value都返回内部类的新实例,该内部类也叫做Value,或者你也可以向Value方法传入ID/名称/两个参数都传
val Red, Yellow, Green = Value
}
object Hi {
def main(args: Array[String]) {
//可以通过如下语句直接引入枚举值
//import MyEnum._
//记住枚举的类型是MyEnum.Value而不是MyEnum
//type MyEnum = Value //此句话用来设置类型别名,这样的话,枚举的类型就变成了MyEnum.MyEnum
//枚举值的ID可通过id方法返回,名称通过toString方法返回,对MyEnum.values的调用输出所有枚举值的集合
//可以通过枚举的ID或名称来进行查找定位,以下两句输出内容一样
println(MyEnum(0))
println(MyEnum.withName("Red"))
}
}
Scala对象,布布扣,bubuko.com
Scala对象
原文:http://blog.csdn.net/shijiebei2009/article/details/38681089