在一个方法中,我希望接收KMutableProperty作为参数并为其赋值.
另一个问题是将参数传递给这种方法的正确方法是什么.
基本上我想有类似的东西:
class MyBinder {
...
fun bind(property: KMutableProperty<Int>): Unit {
property.set(internalIntValue)
}
}
Run Code Online (Sandbox Code Playgroud)
然后在另一个类中调用它
myBinder.bind(this::intProperty)
Run Code Online (Sandbox Code Playgroud)
Kotlin 1.0不允许使用this::intProperty语法,但目前正在使用它,并且很快就可以作为1.1(问题,KEEP提案)的早期访问预览的一部分.
考虑到这一点,我会考虑以另一种方式做你正在描述的事情,例如bind接受一个设置属性的lambda:
class MyBinder {
fun bind(setProperty: (Int) -> Unit) {
setProperty(internalIntValue)
}
}
...
myBinder.bind { intProperty = it }
Run Code Online (Sandbox Code Playgroud)
无论如何,要回答你关于设置值的问题KMutableProperty:设置某些属性的值,或者从技术上讲,调用属性setter,你应该知道它的arity,或者属性的参数个数(及其getter/setter)接受.在文件中声明的属性不接受任何参数,成员属性和扩展属性需要一个参数(接收器实例),而也是扩展的成员属性需要两个参数.这些种类的属性由以下亚型表示KMutableProperty分别为:KMutableProperty0,KMutableProperty1,KMutableProperty2-装置的数量的元数和它们的一般类型参数意味着类型的接收器.每个属性类型都有一个set带有相应参数的方法.一些例子:
fun setValue(property: KMutableProperty0<Int>, value: Int) {
property.set(value)
}
fun setValue(property: KMutableProperty1<SomeType, Int>, instance: SomeType, value: Int) {
property.set(instance, value)
}
Run Code Online (Sandbox Code Playgroud)
请注意,抽象接口中没有set(或get)方法,KMutableProperty因为不可能声明它,不知道所需接收器参数的数量.
| 归档时间: |
|
| 查看次数: |
1253 次 |
| 最近记录: |