Function 函数内部的委托属性
我真的不明白为什么我们可以在函数中使用委托属性。我们不能在函数内创建属性,因为在函数内我们只能创建变量 那么,为什么可能在函数内部创建委托属性呢 这行代码是函数中的一个委托属性,我不明白为什么会这样Function 函数内部的委托属性,function,kotlin,properties,delegated-properties,Function,Kotlin,Properties,Delegated Properties,我真的不明白为什么我们可以在函数中使用委托属性。我们不能在函数内创建属性,因为在函数内我们只能创建变量 那么,为什么可能在函数内部创建委托属性呢 这行代码是函数中的一个委托属性,我不明白为什么会这样 val scoreFragmentArgs by navArgs<ScoreFragmentArgs>() val scoreFragmentArgs by navArgs() 它有getter和setter,对我来说没有意义Kotlin委托基于存储委托对象,并委托获取/设置对其的更
val scoreFragmentArgs by navArgs<ScoreFragmentArgs>()
val scoreFragmentArgs by navArgs()
它有getter和setter,对我来说没有意义Kotlin委托基于存储委托对象,并委托获取/设置对其的更改。因此,在访问委托变量时,可以内联
getValue
调用
例如:
import kotlin.properties.ReadOnlyProperty
import kotlin.reflect.KProperty
object Delegate : ReadOnlyProperty<Any?, Int> {
override fun getValue(thisRef: Any?, property: KProperty<*>): Int = 42
}
fun main() {
val foo by Delegate
println(foo)
}
import kotlin.properties.ReadOnlyProperty
导入kotlin.reflect.KProperty
对象委托:只读属性{
重写fun getValue(thisRef:Any?,属性:KProperty):Int=42
}
主要内容(){
val foo代表
println(foo)
}
Java中的主要方法如下所示:
static final KProperty[]$$delegatedProperties=new KProperty[]{(KProperty)Reflection.property0(new PropertyReference0Impl(Reflection.getOrCreateKotlinPackage(MainKt.class,“123”),“foo”,““”));
公共静态void main(){
System.out.println(Delegate.INSTANCE.getValue(null,$$delegatedProperties[0]);
}
如您所见,访问变量被调用
getValue
所取代,这是创建属性还是仅仅是一个变量?至于原因,函数中的属性而不是变量对GC的影响非常大,因为这意味着每次使用Java中通常简单的变量时都要创建函数对象。对于委托,您显式地声明需要一个已定义的getter和setter,并主动选择创建处理它的对象的开销。