私はインターネットで Scala のチュートリアルをいくつか読んでいるのですが、いくつかの例では例の冒頭でオブジェクトが宣言されていることに気付きました。
Scala のclass
との違いは何ですか?object
ベストアンサー1
要約
class C
Java や C++ と同様にクラスを定義します。object O
作成するシングルトンオブジェクトをO
何らかの匿名クラスのインスタンスとして使用します。何らかのクラスのインスタンスに関連付けられていない静的メンバーを保持するために使用できます。object O extends T
オブジェクトO
を のインスタンスにしますtrait T
。その後はどこにでも を渡すことができますO
が、 がT
期待されます。- が存在する場合
class C
、object C
コンパニオンオブジェクトクラスのC
; コンパニオン オブジェクトは自動的に のインスタンスになるわけではないC
ことに注意してください。
Scalaのドキュメントも参照してください。物体そしてクラス。
object
静的メンバーのホストとして
ほとんどの場合、object
最初に何らかのクラスのインスタンスを作成しなくても使用できるメソッドと値/変数を保持するために が必要になります。この使用法は、static
Java の メンバー と密接に関連しています。
object A {
def twice(i: Int): Int = 2*i
}
その後、 を使用して上記のメソッドを呼び出すことができますA.twice(2)
。
twice
何らかのクラスのメンバーである場合はA
、まずインスタンスを作成する必要があります。
class A() {
def twice(i: Int): Int = 2 * i
}
val a = new A()
a.twice(2)
twice
インスタンス固有のデータを必要としないため、これがいかに冗長であるかがわかります。
object
特別な名前付きインスタンスとして
自体をクラスまたは特性の特別なインスタンスとして使用することもできますobject
。これを行う場合、オブジェクトはtrait
サブクラスのインスタンスになるために、何かを拡張する必要があります。
次のコードを考えてみましょう。
object A extends B with C {
...
}
B
この宣言では、まずと の両方を拡張する匿名 (アクセス不可能) クラスを宣言しC
、 という名前のこのクラスの単一のインスタンスをインスタンス化しますA
。
これは、または、または のA
型のオブジェクトを期待する関数に渡すことができることを意味します。B
C
B with C
追加機能object
Scalaにはオブジェクト特有の機能もいくつかあります。公式文書。