変更がソースと互換性があることを考えると、どのソリューションが一般的に優先されるべきですか?
これ
object Foo {
val Bar = new Baz(42, "The answer", true)
}
またはこれ?
object Foo {
object Bar extends Baz(42, "The answer", true)
}
変更がソースと互換性があることを考えると、どのソリューションが一般的に優先されるべきですか?
これ
object Foo {
val Bar = new Baz(42, "The answer", true)
}
またはこれ?
object Foo {
object Bar extends Baz(42, "The answer", true)
}
2 つのコンストラクトの機能上の違いは、object Bar
必要なときにのみ作成されるのに対し、 は使用val Bar
されるとすぐに作成されることobject Foo
です。実際問題として、これはlazy val
、右辺が高価で常に必要とされない場合は、オブジェクト (または ) を使用する必要があることを意味します。そうでなければ、val
おそらくもっと簡単です。
また、クラスBaz
が final の場合、object
拡張できないため、スタイルを使用できないことに注意してください (ただし、必要になるまで作成を延期する場合Baz
は引き続き使用できます)。lazy val
2 番目のクラスでは、新しいクラスを作成していますが、情報を追加していません (メソッド、値、または新しいものをオーバーライドしていません)。