Kotlin中特有的幾個知識點
數據類
在一個規範的系統架構中,數據類通常佔據着非常重要的角色,用於將服務器或者數據庫中的數據映射到內存當中,爲編程邏輯提供數據模型支持
數據類通常要重寫equals()、hashCode()、toString()這幾個方法. equals()用來判斷是否相等. hashCode()作爲equals()配套方法,也需要一起重寫,否則會導致HashMap、HashSet、等hash相關的系統類無法正常工作. toString()方法用來提供更詳細的日誌,否則只會打印出來內存地址
Java實現的話:
public class Test {
private String ta;
private double tb;
public Test(String ta, double tb) {
this.ta = ta;
this.tb = tb;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Test test = (Test) o;
return Double.compare(test.tb, tb) == 0 &&
Objects.equals(ta, test.ta);
}
@Override
public int hashCode() {
return Objects.hash(ta, tb);
}
@Override
public String toString() {
return "Test{" +
"ta='" + ta + '\'' +
", tb=" + tb +
'}';
}
}
看上去非常複雜,關鍵是還沒有任何意義,以上只是爲了讓他擁有數據類的功能而已
如果使用Kotlin來實現:
data class Test(val ta: String, val tb: Double)
是的,就只需要加上一個data關鍵字就可以了,當你在一個類前面聲明瞭data關鍵字時就表明你希望這是一個數據類,Kotlin會根據主構造函數中的參數幫你將equals()、hashCode()、toString()等固定且無實際邏輯意義的方法自動生成,從而大大減少了開發的工作量
當一個類沒有任何代碼時,還可以將尾部的大括號省略
驗證一下:
val test = Test("aa", 23.2)
val test1 = Test("aa", 23.2)
print(test == test1)
此時輸出是true,如果去掉data,輸出則是false
單例類
單例模式是最基礎最常用的設計模式之一,可以用於避免重複對象的創建
核心要點:私有化構造函數,避免外部直接創建,然後對外暴露靜態方法用於獲取當前對象實例
雖然Java中的單例實現並不複雜,但Kotlin做的更好,他將一些固定的、重複的邏輯隱藏起來,只暴露給我們最簡單方便的用法
在Kotlin中創建單例十分簡單,只需要將class改爲object就可以,當然,studio也提供創建單例類的方式,創建類型選擇Object就可以了
object Singleton {
}
現在他已經是單例類了,我們可以直接編寫需要的函數:
object Singleton {
fun test() {
print("========")
}
}
不需要我們私有構造,也不需要提供靜態方法,調用方式類似Java調用靜態方法:
Singleton.test()
看上去只是靜態方法的調用,但是Kotlin幫我們在背後自動創建了Singleton類實例,並且保證全局唯一
歡迎關注這個不是技術號的公衆號,我們聊聊別的。