Kotlin 密封類(sealed class)是一種限制其子類的類。它們主要用于以下幾種情況:
限制繼承:當你想要限制哪些類可以繼承你的類時,可以使用密封類。這有助于確保子類的數量和類型是有限的,從而提高代碼的可讀性和可維護性。
模式匹配:密封類與 Kotlin 的模式匹配(when expression)結合使用,可以更簡潔地處理多種情況。因為你知道一個對象只能是密封類定義的子類之一,所以你可以安全地使用模式匹配而不必擔心意外的類。
狀態封裝:密封類可以用于封裝一組相關的狀態。每個子類代表一種狀態,通過使用密封類,你可以確保所有可能的狀態都被考慮到,并且不會出現未定義的狀態。
避免空指針異常:由于密封類的子類是有限的,因此你可以避免在代碼中出現空指針異常。當你嘗試訪問一個密封類實例的屬性或方法時,編譯器會確保你只處理有效的子類實例。
更好的類型安全:密封類提供了比接口更好的類型安全。接口允許任何類實現它們,而密封類則限制了可能的子類。這有助于減少因錯誤實現而導致的運行時錯誤。
下面是一個簡單的 Kotlin 密封類示例:
sealed class Shape {
data class Circle(val radius: Double) : Shape()
data class Rectangle(val width: Double, val height: Double) : Shape()
data class Triangle(val base: Double, val height: Double) : Shape()
}
在這個示例中,我們定義了一個名為 Shape
的密封類,它有三個子類:Circle
、Rectangle
和 Triangle
。通過使用密封類,我們可以確保只有這三種形狀可以被實例化,從而提高代碼的類型安全和可讀性。