请解释 Scala 中单例对象的含义,并说明其定义方式及具体使用方法。
考察说明
考查对 Scala 单例对象语法、语义及其与类、伴生对象关系的理解。
回答思路
- 【回答框架 1】单例对象是 Scala 中用 object 关键字定义的对象,它本身就是一个类实例,且全局唯一,相当于 Java 中的静态成员容器,但更安全且可继承。
- 【回答框架 2】定义方式为 object 名称 { 成员 },例如 object MathUtils { def add(a: Int, b: Int): Int = a + b },不能带参数,首次访问时初始化。
- 【回答框架 3】使用方法为直接通过名称引用,如 MathUtils.add(1, 2);单例对象可以作为伴生对象,与同名类共享私有成员,常用于工厂方法和工具类。
- 【回答框架 4】单例对象可以继承类和特质,因此比 Java 静态方法更灵活,能够作为参数传递或实现接口。
- 【回答框架 5】单例对象的初始化是线程安全的,但需注意其生命周期和依赖注入场景下的测试困难。
- 【关键点 1】object 关键字定义,全局唯一,无构造参数。
- 【关键点 2】伴生对象可访问类的私有成员,常用于工厂方法。
- 【关键点 3】单例对象可继承类和特质,提升复用性。
- 【关键点 4】初始化线程安全,但不利于依赖注入和测试。
- 【易错点 1】将单例对象与类混淆,误认为可多次实例化。
- 【易错点 2】过度使用单例对象作为全局状态容器,导致代码耦合和测试不便。
- 【易错点 3】忽视伴生对象与类的相互访问规则,导致编译错误。