【Android&Kotlin】在AndroidStudio上使用noArg和allOpen插件

目前Android上有许多好用的库,但是它们在和Kotlin配合的时候,并不是那么愉快。Kotlin中的data class是一种非常好用的类,它可以自动生成许多方法,来方便我们的使用。但是Android的第三方库需要通过反射来加载一些class,这就要求class必需有一个无参的构造函数,而Kotlin的data class默认没有无参构造函数,并且data class默认为final类型,不可以被继承,这造成了第三方库使用的诸多不便。好在Kotlin官方为我们提供了两个插件,可以为我们解决以上两个问题。

首先,我们需要在Android工程根目录下的build.gradle文件中的适当位置添加以下代码:

buildscript {
    ...
    ext.kotlin_version = '1.1.60'//在启用Kotlin的情况下,这行是已存在的,无需添加
    dependencies {
        ...
        classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
        classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
    }
}

然后在app Module下build.gradle文件内适当的位置添加:

apply plugin: 'kotlin-noarg'
apply plugin: 'kotlin-allopen'

在包上右键,选择New -> Kotlin File/Class,输入一个名称,Kind选择File,点击确定。
在新建的文件内输入:

annotation class Poko   //Poko为刚才输入的名称

右键点击一下代码输入窗口,选择Copy Reference,复制此文件的包名+文件名。
回到app Module下的build.gradle文件内,在最后一行添加如下两行

noArg {
    annotation("aaa.bbb.ccc.ddd.Poko")//"aaa.bbb.ccc.ddd为模拟包名"
}

allOpen {
    annotation("aaa.bbb.ccc.ddd.Poko")
}

最后点击 Sync Now等待AndroidStudio自动完成配置。
至此,你可以开始写你的代码了。

下面我会写一个DEMO,来验证noArg和allOpen是否配置成功。

创建一个新的Android工程,语言选择Java,AndroidStudio会自动为我们生成MainActivity.java和activity_main.xml文件。然后新建一个Kotlin类:Person

这里写图片描述

输入以下代码:

data class Person(val name:String, val age:Int)

打开MainActivity.java,在onCreate方法的最后添加以下代码:

 try {
    Person person = Person.class.newInstance();
    Log.i("MainActivity", person.toString());
} catch (IllegalAccessException | InstantiationException e) {
    e.printStackTrace();
}

我们通过java的反射来试图创建一个空参数的Person对象,然后输入这个对象中的数据。现在运行这个Android程序,理论上,这个程序是会出错的,因为我们捕获了这个异常,所以程序不会崩溃,但是异常信息还是会输出在Logcat:
这里写图片描述

我们发现,因为在第13行就报了异常,导致下面的Log并没有被执行。那么现在我们按之前上述的方式,配置好noArg和allOpen,并且回到Person内,为它加上注释:
这里写图片描述

完成后,我们再次运行这个程序,并观察Logcat,程序运行起来后,并没有错误信息,而且Log成功的输出了:
这里写图片描述
至此,可以确定,noArg配置成功。

猜你喜欢

转载自blog.csdn.net/xiazunyang/article/details/78575139