在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?=?0button.setOnClickListener(object?:?ClickListener?{override?fun?onClick()?{clicks++??//?直接修改外部變量}})return?clicks }
5.?實際應用場景
- ??Android點擊事件(替代Java匿名內部類)
- ??快速實現回調接口
- ??單元測試中的模擬對象(Mock)