Scala中的伴随对象和单例类之间的区别是什么(Guice)

时间:2016-04-27 06:35:28

标签: scala

我想知道伴侣对象和用@Singleton声明的类有什么区别?

据我了解,你只能有两个实例。您可以在课堂上使用依赖注入,而不是使用对象,但除此之外,我并不认为存在很多不同。

4 个答案:

答案 0 :(得分:1)

好吧,简单地说。 名为与类相同的单个对象称为伴随对象。 还必须在与该类相同的源文件中定义伴随对象。 您也在使用Guice吗?那个@Singleton是我认为的Guice。

答案 1 :(得分:1)

非常相似的东西。对象是Scala允许您创建单例对象的方式。

要记住的事情:

  • Singleton类(Java Style)比Objects更容易测试。这是因为您可以在测试中创建不同的类,但是您永远不能创建多个对象
  • 对象不能有构造函数
  • 无法继承对象

答案 2 :(得分:1)

另一个不同之处是,序列化对Scala单例对象的引用使用自定义代码,该代码将始终解析存在于各个类加载器中的该对象的单个实例。

答案 3 :(得分:0)

正如名称所反映的那样,Scala中的Singleton在整个应用程序生命周期中都有一个实例。单例的示例是Nil,表示空列表。

另一方面,伴随对象是在Scala中创建的案例类的辅助对象,您可以在其中放置自定义对象构造函数(应用),隐式转换,分解器(unapply)。自动定义案例类时,会定义伴随对象。