Scalaのコンパニオンオブジェクト

読み取り時間:4分

コンパニオンオブジェクトの使用を理解するためには、最初の静的メンバー オブジェクト指向言語では、クラスはフィールドやメソッドなどのメンバーを含む青写真であることを学びました。 しかし、これらのフィールドやメソッドにアクセスするには、まずこれらのクラスからオブジェクトを構築する必要があります。p>

例を見てみましょう。p>

class Math { private val max = 100 def sum(a: Int, b: Int): Int = a + b}object Test { def main(args: Array): Unit = { val math = new Math() math.sum(5, 10) }}

私たちは、二つの数字を取り、結果として合計を返すsumと呼ばれるメソッドでMathというクラスを作成しました。

このコードを実行するために、このMathクラスのインスタンスを作成し、5と10をバイパスしてsumメソッドを呼び出し、出力として15を受 ただし、ご覧のように、sumメソッドはMathクラスのメンバー変数には依存しません。

たとえば、この場合のmaxメンバー変数です。 したがって、sumメソッドを呼び出すためにMathクラスのインスタンスを作成する必要はありません。 この場合、これを直接呼び出すことができるはずです。 そして、これはコンパニオンオブジェクトが絵に入る場所です。

コンパニオンオブジェクトについて覚えておく必要がある4つのことがあります。

1。 これらのクラスは、対応するクラスと同じ名前を共有します。p>

2. それらは”object”キーワードから始まります。p>

3. これらは、対応するクラスと同じソースファイルに存在します。

4。 コンパニオンオブジェクトと対応するクラスは、互いのプライベートメンバーとして機能します。p>

“object”キーワードは、これがシングルトンオブジェクトであることを示します。 つまり、プログラムの実行中に、クラスから必要な数のインスタンスを作成できますが、シングルトンオブジェクトは1つだけであり、複数のインス

私たちの数学の例を使用して、アクションでそれらを見てみましょう。ご覧のように、mathクラスと同じ名前のmathという新しいシングルトンオブジェクトを作成しました。 また、”object”キーワードで始まり、Mathクラスと同じファイルに残ります。sumの実装をクラスからコンパニオンオブジェクトに移動しました。

sumの実装をクラスからコンパニオンオブジェクトに移動しました。 これは、sum実装がMathクラスのメンバー変数に依存していないことがわかっているので、その実装をコンパニオンオブジェクトに入れると、呼び出し元がMath

コンパニオンオブジェクトがそのクラスのプライベートメンバーにアクセスできることを示すために書かれた別のメソッドがあります。

ここで、getPrivateMemberはMathクラスをインスタンス化し、”max”という名前のプライベートメンバーを返します。 ここに注意すべきもう一つのことがあります。 GetPrivateMemberを定義するとき、括弧は入れませんでした。 Scalaでは、メソッドに引数がなく、副作用を実行しない場合、つまり純粋な関数である場合、括弧を省略することを選択することができます。ここでは、getPrivateMemberはメンバー変数の値を返すだけなので、括弧を省略します。

Math.sum(5, 10)Math.getPrivateMember

sumメソッドを実行すると、Math companionオブジェクトから実行され、Mathクラスの新しいインスタンスを作成す さらに、companionオブジェクトからMathクラスのprivateメンバー変数にアクセスすることができました。

Applyを使用してオブジェクトを作成する

オブジェクトの新しいインスタンスを作成するには、”new”キーワードを使用する必p>

たとえば、次のようにします:p>

class Person(firstName: String, lastName: String) {def getName: String = firstName + lastName}object Test { def main(args: Array): Unit = { val alice = new Person("Alice", "Christy") }}

私たちは、クラスパラメータとしてfirstNameとlastNameを持つ”Person”というクラスを持っています。 そして、上記のようにPersonの新しいインスタンスを作成します。 私たちは、最初の名前と姓を渡して、新しい人として”アリス”を作成しました。しかし、Scalaでは、newキーワードを使用せずにオブジェクトを作成する方法がもう1つあります。

scalaコンパイラによって特別に扱われるcompanion objectに”apply”というメソッドがあり、newキーワードを必要とせずにクラスの新しいインスタンスを作 私たちのコードでそれを使用する方法を学びましょう。p>

object Person { def apply(firstName: String, lastName: String): Person = new Person(firstName, lastName)}class Person(firstName: String, lastName: String) { def getName: String = firstName + " " + lastName}object Test { def main(args: Array): Unit = { val alice = Person("Alice", "Christy") println(p.getName) }}

ここで見るように、applyメソッドを使用してコンパニオンオブジェクトを作成しました。 クラスPersonのインスタンスを作成するために必要な引数を取り、Personのインスタンスを内部的に作成し、インスタンスを返します。 ご覧のように、newキーワードを使用せずにPersonクラスのインスタンスを作成しました。 そして、他のオブジェクトと同じようにメンバーにアクセスできます。 🙂

これは、このブログのコンパニオンオブジェクトに関するものです。 学び続け、成長し続ける!!!

コメントを残す

メールアドレスが公開されることはありません。