Когда использовать делегирование собственности в Котлине? - PullRequest
0 голосов
/ 05 июня 2018

Я видел этот замечательный разговор Лизы Рэй некоторое время назад https://youtu.be/0cjr4K0tqs4?t=493, который вдохновил меня на создание разных делегатов Property для всех моих привязок, таких как BindActivity(layoutId), BindFragment, BindViewGroup и т. Д. Мой коллега создалфункции расширения для таких же, как Activity.bind(layoutId), View.bind(), ViewGroup.bind() и т. д., которые заставили меня задуматься о том, что должно быть предпочтительнее, чем здесь.Я попытался декомпилировать байт-код kotlin, и он:

  1. Property Delegation создаст новый объект, такой как private final BindActivity binding$delegate = new BindActivity(2131361819);
  2. Кажется, он использует Reflection, что-то вроде следующегоинициализировать KProperty:

    static final KProperty[] $$delegatedProperties = new KProperty[]{(KProperty)Reflection.property1(new PropertyReference1Impl(Reflection.getOrCreateKotlinClass(MainActivity.class), "binding", "getBinding()Lcom/abcd/package/databinding/ActivityMainBinding;")), … another lazy delegated property};

(ActivityMainBinding)this.binding$delegate.getValue((Activity)this, $$delegatedProperties[0])

Вопрос 1: Если делегирование свойства использует отражение, что такоедело их использовать?

Вопросы 2: Кроме того, класс Reflection Котлина, похоже, использует некоторую фабрику отражений kotlin.reflect.jvm.internal.ReflectionFactoryImpl, значит ли это, что отражение в котлине может быть не таким медленным, как в Java?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...