Scala没有静态方法或静态字段,可使用object这个语法达到相同的目的,对象定义了某个类的单个实例java
object Accounts { private var lastNumber = 0 /** * 定义一个getNumber的方法 * * @return */ def getNumber(): Int = { lastNumber += 1 lastNumber } def main(args: Array[String]): Unit = { // 至关于java静态方法调用 println(Accounts.getNumber()) }
在java中,一般会出现一个类即有实例方法又有静态方法的类,在Scala中可使用类和同名的伴生对象达到相同的目的app
class Account { // 实例方法 ...... } object Account { // 静态方法 ...... }
类和它的伴生对象能够相互访问私有特性,但前提是它们都在同一个源文件中ide
abstract class UndoableAction(val description: String) { def undo(): Unit def redo(): Unit } object DoNothing extends UndoableAction("Do nothing") { override def undo() {} } // 打开和保存功能还没有实现 val actions = Map("open" -> DoNothing,"save" -> DoNothing)
一般一个apply方法返回的是伴生类对象 Array("Mary","had","little") Array(100) 和new Array(100) 二者是不一样的概念,前一个表达式调用的是apply(100),输出一个单元素整数100的Array[Int],而第二个表达式调用的是this(100),包含了100个null元素 如下是apply方法的示例 class Account private (val id:Int,initialBalance:Double){ ...... } // 伴生对象 object Account { def apply(initialBalance:Double) = { new Account(1,initialBalance) } }