Scala类是否提供默认apply方法?无伴生对象为何可直接实例化?
Scala中无需new创建类实例的原因解析
你之所以能不用new关键字创建Player实例,并不是因为Scala自动生成了apply方法,而是Scala 3引入的语法糖特性,直接简化了主构造器的调用方式。
核心区别:Scala 2 vs Scala 3
- 在Scala 2中,确实必须手动给类定义伴生对象并实现
apply方法,才能用Player(...)这种写法,否则必须显式写new Player(...)。 - 但Scala 3彻底简化了这个逻辑:只要类有主构造器,就可以直接通过
类名(参数)的方式创建实例,编译器会自动帮你补全new关键字,本质还是调用类的主构造器,和apply方法完全无关。
对应你的代码
你的Player类定义了主构造器:
class Player(tea: String, sal: Int = 0) { val team = tea private val salary = sal }
在Scala 3环境下,Player("AAAA", 1000)完全等价于new Player("AAAA", 1000),编译器会自动处理new的省略,所以你无需定义任何伴生对象或apply方法就能运行这段代码。
如果把这段代码放到Scala 2环境中编译,会直接报错——因为Scala 2没有这个语法糖,必须依赖伴生对象的apply才能省略new。
内容的提问来源于stack exchange,提问作者Mandroid
相关产品推荐
相关产品推荐

