2016-04-27 13 views
2

コンパニオンオブジェクトと@Singletonで宣言されたクラスの違いは何ですか?Scala(Guice)のコンパニオンオブジェクトとシングルトンクラスの違いは何ですか?

私が理解するように、あなたは両方のインスタンスを1つしか持てません。オブジェクトとではなく、クラスとの依存関係注入を使用することはできますが、私は正直言ってそれほど大きな違いはありません。

+0

Singleton' @この注釈が '何を?継承することはできませんコンストラクタを持つことができないオブジェクトよりも多くを作成することはできませんか私はそれを見たことがない。 – ziggystar

+1

私はGuiceからそれを推測します。 –

答えて

1

非常によく似たものです。オブジェクトは、Scalaがシングルトンオブジェクトを作成する方法を示しています。心に留めておくべき

もの:

  • シングルトンクラス(Javaのスタイル)は、オブジェクトよりもテストすることが容易です。あなたのテストで異なるクラスを作成することができますので、これはですが、あなたは1つが
  • オブジェクトが
  • オブジェクトが
1

よく言えば クラスと同じ名前のシングルトンオブジェクトをコンパニオンオブジェクトと呼びます。 また、コンパニオンオブジェクトは、クラスと同じソースファイル内で定義する必要があります。 Guiceも使用していますか?その@Singletonは私が推測するGuiceものです。

0

名前が示すように、ScalaのSingletonはアプリケーションのライフサイクル全体で1つのインスタンスを持ちます。シングルトンの例は空リストを表すNilです。

コンパニオンオブジェクトは、カスタムオブジェクトコンストラクタ(適用)、暗黙の変換、分解(適用解除)を入れることができるScalaで作成されたケースクラスのヘルパーオブジェクトです。ケースクラスを自動的に定義すると、コンパニオンオブジェクトが自動的に定義されます。

関連する問題