類初始化順序
constructor 里的參數列表是首先被執行的,緊接著是 init 塊和屬性初始化器,最后是次構造函數的函數體。
- 主構造函數參數列表
- firstProperty 初始化
- 第一個 init 塊
- secondProperty 初始化
- 第二個 init 塊
- 次構造函數函數體
class Example constructor(param: String) {val firstProperty = "First property: $param".also(::println)init {println("First initializer block that prints $param")}val secondProperty = "Second property: ${param.length}".also(::println)init {println("Second initializer block that prints ${param.length}")}constructor(param: String, secondParam: Int) : this(param) {println("Secondary constructor")}
}
靜態類
2種靜態類, 一種伴生類, 一種獨立類
通過伴生類實現單例模式, 每個類伴生類只允許一個, 伴生類的名字可有可無
class UserManager private constructor(var name: String) {init {print("test == $name")}constructor(name: String, age: Int) : this(name) {}constructor(name: String, age: Int, moreInfo: String) : this(name) {}override fun toString(): String {return name}companion object {val instance = UserManager("defaultName");fun getInstance(): UserManager {return instance}}}
通過獨立類實現工具類
object LogUtil {private val TAG = LogUtil.javaClass.simpleName.toString()fun log(ss: String): Unit {Log.e(TAG, ss)}}
數據類
- data class 必須至少有一個參數。
- 所有的主構造函數參數需要被標記為 val 或 var。
- 數據類不能是抽象的、開放的(open)、密封的(sealed) 或者內部的(inner)
可以使用網站生成數據類
https://transform.tools/json-to-kotlin
以下是兩種生成的例子, Kotlin對下劃線命名有警告, 所以自己不會生成下劃線的名字, 使用注解的時候需要第三方庫
implementation ‘com.fasterxml.jackson.core:jackson-annotations:2.11.2’
data class Root(val userId: Long,val id: Long,val title: String,val completed: Boolean,)data class Root2(@JsonProperty("device_brand")val deviceBrand: String,@JsonProperty("device_id")val deviceId: String,@JsonProperty("device_number")val deviceNumber: String,val googleAdId: String,@JsonProperty("main_package_id")val mainPackageId: Long,val os: String,val page: Long,val query: String,val refresh: Boolean,)
Kotlin中所有類的類型
在 Kotlin 中,有以下幾種主要的類類型:
- 普通類(Regular Class):這是最常見的類類型。可以用 class 關鍵字來聲明這樣的類。這種類可以包含構造函數、屬性、方法等。例如:class MyClass(var name: String, val age: Int)
- 數據類(Data Class):這類用于存儲多種數據類型的數據。它提供了一些內置的方法,如 equals()、hashCode()、toString() 和 copy()。聲明一個數據類,需要在前面加上 data 關鍵字。例如:data class User(val name: String, val age: Int)
- 對象類(Object Class):這是 Kotlin 的一個單例類。一個對象類不能在構造函數中提供任何參數。可以通過 object 關鍵字創建。例如:object SampleObjectClass
- 枚舉類(Enum Class):這是一種特殊的類,用于定義一組命名的常量值。例如:enum class DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY }
- 密封類(Sealed Class):密封類用于表示受限的類繼承結構。一個密封類自身是抽象的,不能直接實例化并且可以有抽象成員。密封類的所有子類必須在該密封類自身定義的文件中聲明。例如:sealed class Expr
- 內部類(Inner Class):Kotlin 中的內部類是默認不持有外部類引用的。如果需要訪問外部類的成員,需要使用 inner 修飾符。例如:class Outer { inner class Inner }
- 嵌套類(Nested Class):在 Kotlin 中,一個類可以被嵌套在另一個類中,稱為嵌套類。例如:class Outer { class Nested }
- 匿名內部類(Anonymous Inner Class):在 Kotlin 中,一般使用對象表達式創建匿名類的對象。例如在監聽器的實例化中常用到。
以上就是 Kotlin 中的主要類類型。如果您還有其他關于 Kotlin 或其他 Android 相關的問題,歡迎隨時提問。