Android 新貴 kotlin (5)

圖
我們給 train 賦值為 null , 報錯然後就出現了,有兩個原因,在 kotlin 中預設 val 為immutable 型別,所以我們不能為 val 型別從新賦值。這個我們可以使用 var 關鍵字來定義變數 train 。第二個錯誤就是我們在 kotlin 不能將 null 賦值給變數。

圖
但是在 Java 這樣做,賦值為 null 是沒有問題的。我們的 kotlin 和 java 又是那麼友好。是的這是有辦法的。

圖
我們定義一個方法,接受java 的 JavaMoney 型別作為引數。我們可以在類後面新增一個 ?,表示該類可以為 null。

圖
如果JavaMoney 可以為 null 值,那麼 money 就可能為 null。如果 money 為 null,money.amount 就用報空指標異常。我們有兩種解決方案。第一種比較傳統。就是判斷 money 不為空時呼叫 money的 amount。


圖
?:表示當前是否物件可以為空,!!: 表示當前物件不為空的情況下執行。

圖

圖
在 kotlin 中也支援高階函式,所謂高階函式,就是函式可以作為引數,作為返回值來使用。kotlin 也支援高階函式。在函式 findEmails 中,我們將一個函式作為引數傳入 findEmails 這個函式中。然後寫個 TODO 函式。這是一個有意思的,kotlin 特有的方法。

圖
上圖中為 kotlin 的 TODO 的原始碼,返回值為 Nothing。

圖

圖
我們使用 Gson 這個庫來實現對 json 檔案讀取以及解析。User 是一個數據類,類似 java Bean 我們這裡還使用到了 Role 這個列舉類。


圖
之前在學習 Java8 和 javascript 的 stream 我們對陣列進行遍歷,讓後這裡我們可以用 it 來表示每個遍歷的物件,呼叫 sortedBy 來根據 User 物件某個屬性對集合進行排序,最後呼叫 map 方法。

圖

圖
通過檢視 to 原始碼,我們看到其實他就是 pair 的糖果,包裝了一層。



圖
這裡我們需要得到第一個符合條件 User 就可以了,所以呼叫 first()。

圖
在 javascript 的 es6 的新特性,大家可能已經都瞭解到了 deconstruct 解構,這裡我們可以用 _(下劃線) 來代替沒有被使用的屬性。如圖我們可以將 username 和 email 替換為 _ 來表示。