scalaのオブジェクト

1121 ワード

Javaとは異なり、scalaにはobject構文があります.scalaにはstaticキーワードはありませんが、objectで同様の目的を実現できます.
object Student {

  private var num = 0
  def uniqueNum = {num+=1;num}
}

println(Student.uniqueNum)

これにより、単一のオブジェクトStudentが定義されます.1つのプログラムのmainメソッドはobjectでしか定義できません.
object ScalaTest{
  def main(args: Array[String]): Unit = {
    println("Hello World!")
  }
}

もう一つの文法糖は、mainメソッドを書かずにAppを直接継承します.
object ScalaTest extends App {
    println("Hello World!")
}

クラスがインスタンスメソッドを必要とし、静的メソッドも必要とする場合、クラスとobjectが同名であることを伴うオブジェクトによって実現できます.
object Student {
  private var num = 0
  def uniqueNum:Int = {num+=1;num}
}

class Student {
  private val id = Student.uniqueNum
  @BeanProperty val score = 0
  def getId:Int = id
}

オブジェクトにapplyメソッドを定義できます.次の式に遭遇すると、自動的に呼び出されます.
Object(arg1, arg2, ..., argn)

この呼び出し方式は呼び出しconstructorとは異なるが,形式は類似しており,区別しなければならない.
objectにより列挙も実現できる.
object Color extends Enumeration {
  val RED, BLACK  = Value
}

println(Color.BLACK)