皆のためのコースを学ぶ良いプログラマビッグデータを共有する Scalaの一連のオブジェクトを
1. シングルトンオブジェクト
ありません静的メソッドと静的フィールドのスカラ座、いますが、同じ目的を達成するために、このオブジェクト文法構造を使用することができます
1.scala Javaツールで同様、このツールは、関数と定数を格納するために使用することができます
例2.効率的な共有シングル不変
3.シングルトン
シングルトンオブジェクトに似ていますが Javaツールでは、それがない場合、またはオブジェクト、シングルトンオブジェクト名がオブジェクトに貼付されたラベルとして見ることができます。
パッケージ化し 、ロギング
// キーワードオブジェクト定義のシングルトンオブジェクトを
オブジェクトロガー{ デフ情報(メッセージ:文字列):単位=のprintln(S "INFO:$メッセージ") }
シングルトンオブジェクト
// 現在のクラスに見えるようにインポートシングルトンオブジェクト情報
輸入logging.Logger.info クラスプロジェクト(名称:文字列、daysToComplete:INT) クラスTest { ヴァル・Project1の=新しいプロジェクト( "TPSレポート"、1) ヴァル・Project2を=新しいプロジェクト( "ウェブサイトの再設計"、5) //シングルトンオブジェクトが定義されたメソッドを呼び出します 情報( "作成したプロジェクト")//版画 "INFO:作成したプロジェクト" }
そして、シングルトンオブジェクトクラスとの違いは、オブジェクトがシングルトン使用することはできません、シングルトンオブジェクトパラメータではありません新しいキーのインスタンスを、それをインスタンス化パラメータを渡す可能性はありません。
ときに最初の訪問シングルトンオブジェクトが初期化されます。
関連するオブジェクトクラスと呼ばれるクラスと同じ名前のシングルトンオブジェクト、クラスが定義されており、ソースファイル内のオブジェクトを関連付ける必要があります場合は、クラスが彼の仲間にできるシングルトンコンパニオンクラスオブジェクト、クラスとオブジェクトと呼ばれていますお互いのプライベートメンバへのアクセス。
シングルトンオブジェクト名は、コンパニオン・クラスが独立した機能を関連ツールなどのオブジェクト、またはと呼ばれているとは共有されていないエントリポイントScalaのアプリケーション。
2. 関連オブジェクト
では Scalaのクラス、クラス名とクラスとオブジェクト間のコンパニオンオブジェクトと呼ばれる同じオブジェクト変更されたオブジェクトには、プライベートメソッドとプロパティへの相互アクセスに関連付けることができ、それらは同じソースファイル内に存在している必要があります
クラスaccountInfoの{ 関連する機能//オブジェクトクラスは、クラススコープではありません //コンパニオンオブジェクトを直接newUniqueNumber()メソッドを使用することはできません呼び出します VaRのID = AccountInfo.newUniqueNumber() } オブジェクトaccountInfoの{ プライベートVAR lastNumber = 0 プライベートデフnewUniqueNumber()= { lastNumber + = 1; lastNumber } DEFメイン(引数:配列[文字列]){ // Javaで同等の静的メソッドの呼び出し println(AccountInfo.newUniqueNumber()) } }
3.適用する方法を
通常、我々はコンパニオンオブジェクトクラスが定義する方法を適用し、クラス名(パラメータ1、パラメータ... n)の方法を適用するに直面したときに呼び出されます
クラスaccountInfoの{ } オブジェクトaccountInfoの{ プライベートVAR lastNumber = 0 {=プライベートDEF(中間引数)を適用 lastNumber = arg*2 + 1; lastNumber } def main(args: Array[String]) { println(AccountInfo(1)) } }
4. 应用程序对象
Scala程序都必须从一个对象的main方法开始,可以通过扩展App特质,不写main方法。 object Hello extends App{ println("Hello World") } 同 object Hello { def main(args: Array[String]): Unit = { println("Hello World") } }
5.提取器
带有unapply方法的对象,经常用在模式匹配或者偏函数中。
import scala.util.Random object CustomerID { def apply(name: String) = s"$name--${Random.nextLong}" def unapply(customerID: String): Option[String] = { val name = customerID.split("--").head if (name.nonEmpty) Some(name) else None } } //调用apply方法创建一个对象,等价于CustomerID.apply("Sukyoung") val customer1ID = CustomerID("Sukyoung") // Sukyoung--23098234908 customer1ID match { //调用unapply方法,提取name信息 case CustomerID(name) => println(name) // prints Sukyoung case _ => println("Could not extract a CustomerID") }