我不太了解为什么我们可以在函数内部使用委托(delegate)属性。我们无法在函数内部创建属性,因为在函数内部我们只能创建变量。
那么,如何在函数内创建委托(delegate)属性呢?
这行代码是函数内部的委托(delegate)属性,我不明白为什么这是可能的。

val scoreFragmentArgs by navArgs<ScoreFragmentArgs>()
它有 setter/getter 和二传手,对我来说没有意义

最佳答案

Kotlin委托(delegate)基于存储委托(delegate)对象,并委托(delegate)对更改的获取/设置。因此,在访问委托(delegate)变量时可以内联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)
}
Java中的主要方法如下所示:
   static final KProperty[] $$delegatedProperties = new KProperty[]{(KProperty)Reflection.property0(new PropertyReference0Impl(Reflection.getOrCreateKotlinPackage(MainKt.class, "123"), "foo", "<v#0>"))};

   public static void main() {
      System.out.println(Delegate.INSTANCE.getValue(null, $$delegatedProperties[0]));
   }
如您所见,通过调用getValue替换了访问变量。

关于function - 函数内部的委派属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62879843/

10-09 04:16