我想知道伴侣对象和用@Singleton声明的类有什么区别?
据我所知,你只能有两个实例 . 您可以在类中使用依赖注入,而不是使用对象,但除此之外我没有看到太多区别 .
很相似的东西 . 对象是Scala允许您创建单例对象的方式 .
要记住的事情:
Singleton类(Java Style)比Objects更容易测试 . 这是因为您可以在测试中创建不同的类,但是您永远不能创建多个对象
对象不能有构造函数
无法继承对象
好吧,简单地说 . 名为与类相同的单个对象称为伴随对象 . 还必须在与该类相同的源文件中定义伴随对象 . 你也用 Guice ? @Singleton是我猜的Guice .
Guice
另一个区别是序列化对Scala单例对象的引用使用自定义代码,该代码将始终解析相应类加载器中存在的该对象的单个实例 .
顾名思义,Scala中的Singleton在整个应用程序生命周期中都有一个实例 . 单例的示例是Nil,表示空List .
另一方面,伴随对象是在Scala中创建的case类的辅助对象,您可以在其中放置自定义对象构造函数(apply),隐式转换,分解器(unapply) . 自动定义案例类时,会定义伴随对象 .
4 回答
很相似的东西 . 对象是Scala允许您创建单例对象的方式 .
要记住的事情:
Singleton类(Java Style)比Objects更容易测试 . 这是因为您可以在测试中创建不同的类,但是您永远不能创建多个对象
对象不能有构造函数
无法继承对象
好吧,简单地说 . 名为与类相同的单个对象称为伴随对象 . 还必须在与该类相同的源文件中定义伴随对象 . 你也用
Guice
? @Singleton是我猜的Guice .另一个区别是序列化对Scala单例对象的引用使用自定义代码,该代码将始终解析相应类加载器中存在的该对象的单个实例 .
顾名思义,Scala中的Singleton在整个应用程序生命周期中都有一个实例 . 单例的示例是Nil,表示空List .
另一方面,伴随对象是在Scala中创建的case类的辅助对象,您可以在其中放置自定义对象构造函数(apply),隐式转换,分解器(unapply) . 自动定义案例类时,会定义伴随对象 .