Делегированные свойства внутри функций

Я действительно не понимаю, почему мы можем использовать делегированные свойства внутри функций. Мы не можем создавать свойства внутри функций, потому что внутри функций мы можем создавать только переменные.

Как же тогда возможно создание делегированного свойства внутри функции?

Эта строка кода является делегированным свойством внутри функции, и я не понимаю, почему это возможно.

val scoreFragmentArgs by navArgs<ScoreFragmentArgs>()

У него есть геттеры и сеттеры, и для меня это не имеет смысла

1 ответ

Kotlin Delegates основаны на хранении объекта делегата и делегировании ему получения / настройки изменений. Итак, можно встроить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.

Другие вопросы по тегам