Kotlin中如何通过双冒号运算符引用属性setter?
在Kotlin中引用Setter的方法
在Kotlin里,要像Java那样引用属性的setter其实很简单——你可以通过**可变属性的引用加上.set**来获取对应的setter函数引用,刚好能匹配你示例里的myFunction参数需求。
具体示例
先定义一个带可变属性的类:
class MyClass { var someVar: String = "default" }
假设你的函数签名是这样的(和Java里的myMethod对应):
fun myFunction( getter: (MyClass) -> String, setter: (MyClass, String) -> Unit ) { val instance = MyClass() // 使用setter设置值 setter(instance, "Kotlin is cool!") // 使用getter获取值并打印 println(getter(instance)) }
调用的时候,直接用属性引用加.set来传递setter:
myFunction(MyClass::someVar, MyClass::someVar.set)
原理说明
- 对于Kotlin的可变属性(
var),MyClass::someVar是一个KMutableProperty1<MyClass, String>类型的属性引用,它本身已经包含了get和set的逻辑。 - getter的引用直接用
MyClass::someVar就可以,因为它可以自动适配(MyClass) -> String的函数类型(本质是调用属性的get方法)。 - 而setter的话,需要通过
.set来获取对应的函数引用,这个引用的类型正好是(MyClass, String) -> Unit,和Java里setter方法引用的作用完全一致。
如果是扩展属性或者其他场景,这个用法也同样适用,只要属性是可变的(var)就能通过.set拿到setter的函数引用。
内容的提问来源于stack exchange,提问作者Displee
相关产品推荐
相关产品推荐

