使用new运算符定义对象与通过扩展类定义独立对象之间有什么区别?
更具体地说,给定类型 class GenericType { ... },val a = new GenericType 和之间有什么区别object a extends GenericType?
实际上,object声明的初始化方式与new字节码中的相同.但是,有很多不同之处:
object 作为单身人士 - 每个都属于一个只存在一个实例的类;object 懒惰地初始化 - 它们只会在第一次被引用时被创建/初始化;object和一个class(或trait)同名的同伴 ;object在协同服务器上生成静态转发器时定义的方法class;object可以访问同伴的私有成员class;这些只是我能想到的蝙蝠的一些差异.可能还有其他人.
*什么是"相关"类或特征是一个较长的故事 - 查看Stack Overflow上的问题,如果您感兴趣,可以解释它.scala如果找不到标签,请查看标签的维基.
对象定义(无论是否扩展)意味着创建单例对象。
scala> class GenericType
defined class GenericType
scala> val a = new GenericType
a: GenericType = GenericType@2d581156
scala> val a = new GenericType
a: GenericType = GenericType@71e7c512
scala> object genericObject extends GenericType
defined module genericObject
scala> val a = genericObject
a: genericObject.type = genericObject$@5549fe36
scala> val a = genericObject
a: genericObject.type = genericObject$@5549fe36
Run Code Online (Sandbox Code Playgroud)