目前Android上有許多好用的庫,但是它們在和Kotlin配合的時候,並不是那麼愉快。Kotlin中的data class是一種非常好用的類,它可以自動生成許多方法,來方便我們的使用。但是Android的第三方庫需要通過反射來加載一些class,這就要求class必需有一個無參的構造函數,而Kotlin的data class默認沒有無參構造函數,並且data class默認爲final類型,不可以被繼承,這造成了第三方庫使用的諸多不便。好在Kotlin官方爲我們提供了兩個插件,可以爲我們解決以上兩個問題。
1. project的build中添加
### 最上方加入
apply plugin: "kotlin-noarg"
apply plugin: "kotlin-allopen"
dependencies{
classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
classpath "org.jetbrains.kotlin:kotlin-allopen:$kotlin_version"
//要跟kotlin版本一直
}
2. 創建一個註解
New -> Kotlin File/Class,輸入一個名稱,Kind選擇File,點擊確定
在新建的文件內輸入:
annotation class NoArg
這裏我將這個註解創建到了base層,所以要在base對應的build下添加
//填寫你們自己的對應的路徑
allOpen {
annotation("com.***.common_base.NoArg")
}
noArg {
annotation("com.***.common_base.NoArg")
}
3. 使用註解
在我們需要無參構造的bean類使用
4. 在對應的build中添加apply
因爲我是在base中寫的註解,所以在base中的Build添加,但是我別的模塊用到了無參構造,所以用到該註解或使用無參構造也需要添加
apply plugin: "kotlin-noarg"
5. 使用無參構造
val eventMessage = EventMessageBean::class.java.newInstance()
大功告成!!!
在這配置中遇到一個錯誤:
Annotation processors must be explicitly declared now.
See https://developer.android.com/r/tools/annotation-processor-error-message.html for more details.
解決辦法:
在app的build中添加
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
includeCompileClasspath = true
}
}
}
如果沒有遇到就更好啦~~~