面试题答案
一键面试对象表达式
- 定义:对象表达式用于在需要的地方创建匿名对象。可以实现接口或继承类,并且可以在表达式中定义属性和方法。
- 使用场景:当只需要创建一个一次性使用的对象,且不需要给这个对象命名时使用。比如作为函数参数传递一个实现了特定接口的对象。
- 生命周期:与创建它的上下文相关联。当包含对象表达式的代码块执行完毕,如果没有其他地方引用该对象,它可能会被垃圾回收。
- 内存影响:由于通常是短期使用,在其不再被引用后会很快释放内存,不会长期占用额外内存。
代码示例:
interface MyInterface {
fun doSomething()
}
fun main() {
val myObject = object : MyInterface {
override fun doSomething() {
println("Doing something in object expression")
}
}
myObject.doSomething()
}
对象声明
- 定义:对象声明使用
object
关键字定义一个单例对象,它有自己独立的声明空间。 - 使用场景:当需要一个全局唯一的实例,比如工具类、配置对象等,不需要多次创建实例时使用。
- 生命周期:伴随整个应用程序的生命周期存在,在第一次使用时被初始化,之后一直存在于内存中。
- 内存影响:由于其长期存在于内存中,会一直占用一定的内存空间,直到应用程序结束。
代码示例:
object MySingleton {
val myProperty = "This is a property in singleton"
fun doSomething() {
println("Doing something in object declaration")
}
}
fun main() {
MySingleton.doSomething()
println(MySingleton.myProperty)
}
选择建议
- 如果只需要一个临时的、一次性使用的对象,例如在方法内部创建一个实现特定接口的对象作为参数传递,使用对象表达式。
- 如果需要一个全局唯一的实例,并且在整个应用程序生命周期中都可能使用到,例如全局的工具类、配置管理等,使用对象声明。