Scalaのシングルトンオブジェクト
Scalaの静的メンバは、定義され、その代わりにシングルトンオブジェクト(シングルトンオブジェクト)を定義することができません。オブジェクトのキーワードで定義されています。
オブジェクトは、必要な機能が含まれているクラスの単一のインスタンスを定義します。
object Accounts{
private var lastNumber = 0
def newUniqueNumber() = { lastNumber += 1; lastNumber}
}
あなたがアプリケーションに新しい一意のアカウントが必要な場合は、Account.newUniqueNumber()を呼び出しすることができます。
オブジェクトが最初に使用した場合、オブジェクトのコンストラクタが呼び出されます。
:Scalaのシングルトンは、以下のいくつかのシナリオで使用することができる
-ローカルストアツールまたは定数の関数として
効率的に不変の単一のインスタンスを共有-
サービスの単一のインスタンスの使用を調整するために必要と-
クラスとオブジェクトとの間の差は、シングルトン、あるパラメータなしでシングルトンオブジェクト、およびクラス。シングルトンオブジェクトは、新しいキーワードを使用してインスタンス化されていないので、それに渡さないチャンスのインスタンスパラメータがありません。それらが同じJava静的クラス初期化セマンティクスを有するので、各シングルトンオブジェクトは、クラス(合成クラス)の仮想インスタンス、および静的変数ポイントとして実装されます。
個々のオブジェクト(スタンドアロンオブジェクト)
呼ばれる個々のオブジェクトに関連付けられているシングルトンオブジェクトのクラス名を共有していません。これは、ツール関連の機能の方法としては、例えば、多くの場所で使用される、またはエントリポイントはScalaのアプリケーションを定義することができます。
関連オブジェクト(コンパニオンオブジェクト)
シングルトンオブジェクトは、クラスと同じ名前を共有する場合は、このクラス(コンパニオンオブジェクト)のコンパニオンオブジェクトと呼ばれています。クラスとその関連オブジェクトがで定義する必要があり、同じソースファイルインチ このクラスは、単一の実施形態コンパニオンクラスオブジェクト(コンパニオンクラス)と呼ばれています。クラスとそのコンパニオンオブジェクトができ、そのプライベートメンバー相互にアクセス。
class Account {
val id = Account.newUniqueNumber()
private var balance = 0.0
def deposit(amount: Double){ balance += amount }
...
}
object Account { //伴生对象
private var lastNumber = 0
def newUniqueNumber() = { lastNumber += 1; lastNumber}
}
注意:
- コンパニオンオブジェクトクラスはなく、それらの範囲で、アクセスすることができます。Accountクラスのメソッドは、Account.newUniqueNumber()は、関連するオブジェクトを呼び出す必要があります。
- REPLで、同時にクラスとオブジェクトを定義するモードを貼り付ける必要があります。タイプ
:paste
、およびタイプまたはクラス定義及びオブジェクトを貼り付け、とCtrl + D出口モードを貼り付けます。
オブジェクトは、コンパニオン工場として使用されています
私たちは通常、関連するオブジェクトは、工場として使用されます。
以下は、あなたがのインスタンスを作成するには「新しい」を使用する必要はないかもしれない、簡単な例です。
class Bar(foo: String)
object Bar {
def apply(foo: String) = new Bar(foo)
}