7

変更がソースと互換性があることを考えると、どのソリューションが一般的に優先されるべきですか?

これ

object Foo {
  val Bar = new Baz(42, "The answer", true)
}

またはこれ?

object Foo {
  object Bar extends Baz(42, "The answer", true)
}
4

2 に答える 2

8

2 つのコンストラクトの機能上の違いは、object Bar必要なときにのみ作成されるのに対し、 は使用val Barされるとすぐに作成されることobject Fooです。実際問題として、これはlazy val、右辺が高価で常に必要とされない場合は、オブジェクト (または ) を使用する必要があることを意味します。そうでなければ、valおそらくもっと簡単です。

また、クラスBazが final の場合、object拡張できないため、スタイルを使用できないことに注意してください (ただし、必要になるまで作成を延期する場合Bazは引き続き使用できます)。lazy val

于 2011-05-25T13:44:51.343 に答える
2

2 番目のクラスでは、新しいクラスを作成していますが、情報を追加していません (メソッド、値、または新しいものをオーバーライドしていません)。

于 2011-05-25T13:43:38.163 に答える