Kotlin 密封類(sealed class)是一種限制其子類的類。通過使用密封類,您可以確保在編譯時僅允許特定的子類擴展它,從而提高類型安全性。
以下是密封類如何保證類型安全的幾個關鍵點:
sealed class Shape {
data class Circle(val radius: Double) : Shape()
data class Rectangle(val width: Double, val height: Double) : Shape()
}
在這個例子中,Shape
是一個密封類,它只允許 Circle
和 Rectangle
作為其子類。任何其他類嘗試繼承 Shape
都將導致編譯錯誤。
禁止匿名子類:密封類不允許創建匿名子類。這意味著你不能在運行時動態地創建一個新的子類實例,而必須使用已定義的子類。這有助于減少運行時的類型錯誤。
使用 when
表達式:當使用 when
表達式處理密封類實例時,編譯器會確保每個分支都處理一個有效的子類類型。這有助于避免在 when
表達式中出現未處理的子類,從而提高代碼的可讀性和健壯性。
fun printShape(shape: Shape) {
when (shape) {
is Shape.Circle -> println("Circle with radius ${shape.radius}")
is Shape.Rectangle -> println("Rectangle with width ${shape.width} and height ${shape.height}")
}
}
在這個例子中,printShape
函數接受一個 Shape
類型的參數,并使用 when
表達式處理不同的子類類型。由于 Shape
是密封類,編譯器會確保 when
表達式中的所有分支都是有效的。
總之,Kotlin 密封類通過限制其子類的數量和類型,以及在編譯時進行嚴格的檢查,有助于確保類型安全。