2

scala でコンパニオン オブジェクトを使用するのに少し混乱しています。複数のコンストラクターを提供する場合は、通常、コンパニオン オブジェクトを宣言し、applyメソッドをオーバーロードします。しかし、この2つの方法の違いは何ですか?:

case class Node(....)

object Node {
   def apply(...) = new Node(....) // 1 way
   def apply(...) = Node(...) // second way
}

私が見たほとんどすべての例は、最初の形式を使用しています。

しかし、私のコードは両方の形式を使用して同じように動作するようです。キーワードの使用newは、通常のクラスがある場合にのみ意味がありますか? (ケースクラスではない)?

4

2 に答える 2

1

ケースクラスを宣言するとき。コンパニオン オブジェクトは、apply メソッドを使用してコンパイラによって生成されます。その実装では、new キーワードを使用してケース クラスのオブジェクトが作成されます。

したがって、new キーワードを使用してケース クラスのオブジェクトを作成する apply メソッドで、コンパニオン オブジェクトを再度作成する必要はありません。この作業はコンパイラによって行われます

于 2016-10-17T20:53:44.470 に答える