scala applyメソッドノート

2306 ワード

ScalaがJavaよりもオブジェクトに向いている側面の1つは、Scalaに静的メンバーがないことです.代替品は、Scalaには単一のオブジェクト:singleton objectがあります.
単一のオブジェクトがクラスと同じ名前を共有する場合、彼はこのクラスの伴生オブジェクト:companion objectと呼ばれます.クラスとその伴生オブジェクトを同じソースファイルで定義する必要があります.クラスはこの単例オブジェクトの伴生クラス:companion classと呼ばれる.クラスとその伴生オブジェクトは、プライベートメンバーに相互にアクセスできます.
単一オブジェクトの定義は定義タイプではありません(Scalaの抽象階層では)
クラスとインスタンスオブジェクトの違いの1つは、インスタンスオブジェクトがパラメータを持たず、クラスが可能であることです.newキーワードで単一のオブジェクトをインスタンス化できないため、パラメータに渡す機会がありません.各単一のオブジェクトは、静的変数によって指向される架空のクラス:synthetic classの一例として実装されるため、Java静的クラスと同じ初期化構文を有する.Scalaプログラムは特に,一例オブジェクトが最初にアクセスされたときに初期化されることを指摘する.
Scalaのapplyには2つの形式があり,1つは伴生オブジェクトのapply,1つは伴生クラスのapplyであり,以下にこの2つのapplyの使用を示す.
サンプルコード:
class ApplyOperation {
}
class ApplyTest{
    def apply() = println("I am into spark so much!!!")
    def haveATry: Unit ={
        println("have a try on apply")
    }
}
object ApplyTest{
     def apply() = {
          println("I am into Scala so much")
        new ApplyTest
     }
}
object ApplyOperation{
     def main (args: Array[String]) {
        val array= Array(1,2,3,4)
        val a = ApplyTest() //      object    

         a.haveATry
         a() //      class   apply  
    }
}

実行結果
I am into Scala so much have a try on apply I am into spark so much!!!
object applyは比較的一般的な使い方です.主に複雑なオブジェクトの初期化の問題を解決するために使用されます.同時に単例でもある