Kotlin-kotlin-android-extension被

2021-03-29  本文已影响0人  杨0612
众所周知,添加了kotlin-android-extension插件以后,就可以直接在Kotlin中直接引用控件了,不再需要findViewById极其的方便,但同时也带来一些问题:
1.控件错误导入

插件通过控件名就会把控件import到当前类,但不会做有效校验。
AActivity 使用activity_a.xml布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    <TextView
        android:id="@+id/aTv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

BActivity 使用activity_b.xml布局

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    <TextView
        android:id="@+id/bTv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</RelativeLayout>

其实在AActivity导入bTv控件,也是可以编译通过的,只是运行时会报错。理论上,在layout下的所有控件,都是可以导入的,编译时不做任何有效校验,一旦控件错误导入,某个业务场景下才使用到该控件,那么bug就会藏得很深。

2.局限性

只能在Kotlin代码使用,而Java是没法使用的,那么Java就得用另外一套方式,对于Kotlin、Java共存的项目就会增加维护性。

其实在Kotlin 1.4.20-M2中,JetBrains废弃了Kotlin Android Extensions编译插件,转而建议我们使用ViewBinding。

以上分析有不对的地方,请指出,互相学习,谢谢哦!

上一篇下一篇

猜你喜欢

热点阅读