kotlin多模塊下使用allopen、noarg插件

目前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類使用在我們需要使用無參構造的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 
        		} 
        	}	
  }

如果沒有遇到就更好啦~~~

發佈了64 篇原創文章 · 獲贊 11 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章