Lisa Wray在https://youtu.be/0cjr4K0tqs4?t=493的某个时候看到了这个精彩的演讲,这激发了我为BindActivity(layoutId)
,BindFragment
,BindViewGroup
等所有ViewBinding创建不同的Property委托。 。
我的同事为Activity.bind(layoutId)
,View.bind()
,ViewGroup.bind()
等创建了相同的扩展功能,这让我想知道哪个应该优先于此。我尝试反编译kotlin字节代码并且它:
private final BindActivity binding$delegate = new BindActivity(2131361819);
似乎正在使用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:另外,kotlin的Reflection
类似乎正在使用一些反射工厂kotlin.reflect.jvm.internal.ReflectionFactoryImpl
,所以它是否意味着kotlin中的反射可能不像java中那么慢?