kotlin中object:的用法

发布于:2025-06-29 ⋅ 阅读:(13) ⋅ 点赞:(0)

在Kotlin中,object: 用于声明匿名对象(Anonymous Object),这是实现接口或继承类的轻量级方式,无需显式定义具名类。以下是核心用法和场景:


1. 基本语法

val obj = object : SomeInterface {  // 实现接口
    override fun method() { ... }
}

val obj2 = object : SomeClass() {   // 继承类
    override fun method() { ... }
}

2. 典型用途

(1) 实现接口/抽象类的临时实例
interface ClickListener {
    fun onClick()
}

button.setOnClickListener(object : ClickListener {
    override fun onClick() {
        println("Button clicked")
    }
})
(2) 重写类方法(类似Java匿名内部类)
val thread = object : Thread() {
    override fun run() {
        println("Running in anonymous Thread")
    }
}
thread.start()
(3) 作为表达式返回值
fun createAdder(x: Int) = object {
    fun add(y: Int) = x + y
}

val adder = createAdder(5)
println(adder.add(3))  // 输出 8

3. 与伴生对象(companion object)的区别

特性 object:(匿名对象) companion object
作用域 临时单例(无类名) 类内部的静态单例
生命周期 随引用结束而回收 伴随类加载存在
典型场景 回调、临时实现 工厂方法、类级常量

4. 注意事项

  • • 匿名对象非单例:每次调用 object: 会创建新实例。
  • • 访问外部变量:可直接修改捕获的局部变量(与Java不同):
    fun countClicks(button: Button): Int {
        var clicks = 0
        button.setOnClickListener(object : ClickListener {
            override fun onClick() {
                clicks++  // 直接修改外部变量
            }
        })
        return clicks
    }

5. 实际应用场景

  • • Android点击事件(替代Java匿名内部类)
  • • 快速实现回调接口
  • • 单元测试中的模拟对象(Mock)

网站公告

今日签到

点亮在社区的每一天
去签到