请详细说明 Kotlin 里 object 关键字的具体用途,并解释不同用途之间的区别。
考察说明
考查对 Kotlin object 关键字多种用法的掌握程度,以及能否清晰区分不同场景。
回答思路
- 【回答框架 1】object 关键字在 Kotlin 中主要用于三种场景:对象声明、伴生对象和对象表达式。对象声明用于定义单例,通过 class 关键字和 object 结合,在类加载时初始化,线程安全,直接使用类名引用实例。
- 【回答框架 2】伴生对象是类内部的 object 声明,用 companion 标记,可以访问类的私有成员,类似于 Java 的静态成员,但本质上仍是对象,可以继承接口或类。通常用于定义工厂方法或静态常量。
- 【回答框架 3】对象表达式用于创建匿名内部类的实例,可以继承类或实现接口,每次执行都会创建新对象,用于需要一次性使用的实例。
- 【回答框架 4】区别:对象声明和伴生对象都是单例,但伴生对象属于类,而对象表达式每次新建;对象声明可以直接引用,伴生对象需要通过类名调用,对象表达式常用于参数传递。
- 【关键点 1】对象声明创建单例,伴生对象提供静态成员替代,对象表达式创建匿名实例。
- 【关键点 2】伴生对象在类加载时初始化,且可以访问类的私有成员。
- 【关键点 3】对象表达式不是单例,每次执行都会创建新对象。
- 【易错点 1】不要混淆伴生对象与静态成员,伴生对象仍是对象实例。
- 【易错点 2】对象声明是懒加载的吗?实际上对象声明在首次访问时初始化,但伴生对象在类加载时初始化,需根据版本确认。