kotlin 重構 mvp 專案(1)
最近將一個 java 寫的 MVP 的 android 專案遷移為 kotlin ,一邊遷移一邊學習,人類的本性就是喜新厭舊,這一點在程式設計師身上體現的淋漓盡致,也是我們不斷進步的動力源泉,不過作為架構師儘量還是學會限制自己好奇心,新技術、新語言要是跟風,會活活拖垮你的專案的,自己一點感受。
以下為隨著專案遷移過程中遇到的 kotlin 與 java 不同。
- 首先let()的定義是這樣的,預設當前這個物件作為閉包的it引數,返回值是函式裡面最後一行,或者指定return
fun <T, R> T.let(f: (T) -> R): R = f(this)
override fun hideProgress() { progressDialog?.let { if(it.isShowing) it.cancel() } }
這裡 let 定義程式碼塊中 it 就是物件 progressDialog
- object 宣告一個單例的語法很簡單,我們使用object關鍵字替代class關鍵字就可以宣告一個單例物件
object CommonUtil { }
- data 作為類修飾符,用於資料類,也就是我們資料模型。這是一個輕量級的類,用於資料模型使用。
data class Tutorial{ @SerializedName("name") private var name:String? = null, }
- 在 kotlin 中的型別判斷也變得簡單
if(context is BaseActivity){ }
- 在 kotlin 中的物件型別轉換為 as 操作符
val activity = context as BaseActivity?
- var是一個可變變數,這是一個可以通過重新分配來更改為另一個值的變數(類似 javascript let)。
- val是一個只讀變數,這種宣告變數的方式相當於java中的final變數。一個val建立的時候必須初始化,因為以後不能被改變。(類似 javascript const)
private var parentActivity:BaseActivity? = null
- 因為被abstract修飾的類預設具有open屬性
open class BaseInteractor(): MVPInteractor{ }
- lateinit 延遲載入
protected lateinit var preferenceHelper: PreferenceHelper protected lateinit var apiHelper: ApiHelper