Kotlin 密封類(sealed class)是一種限制其子類的類。它們用于表示限定的類繼承結構,可以避免出現不受控制的類繼承。要避免錯誤使用密封類,請遵循以下幾點:
sealed class Shape {
data class Circle(val radius: Double) : Shape()
data class Rectangle(val width: Double, val height: Double) : Shape()
// 不應該有其他子類
}
when
表達式進行匹配:當處理密封類的實例時,使用 when
表達式而不是 if-else
語句可以避免錯誤。when
表達式可以確保所有可能的子類都被正確處理。fun getArea(shape: Shape): Double {
return when (shape) {
is Shape.Circle -> Math.PI * shape.radius * shape.radius
is Shape.Rectangle -> shape.width * shape.height
}
}
避免使用非密封類的子類:如果一個類被聲明為密封類,那么它不能被其他類繼承。在編寫代碼時,請確保不會意外地使用非密封類的子類。
使用 expect
和 actual
關鍵字處理跨平臺代碼:如果你需要在多個平臺上編寫代碼,并且某些類型在不同平臺上有不同的實現,可以使用 expect
和 actual
關鍵字來處理這種情況。這可以確保在不同平臺上正確地使用密封類及其子類。
// Kotlin/Native
expect sealed class Shape {
data class Circle(val radius: Double) : Shape()
data class Rectangle(val width: Double, val height: Double) : Shape()
}
// Kotlin/JVM
actual sealed class Shape {
data class Circle(val radius: Double) : Shape()
data class Rectangle(val width: Double, val height: Double) : Shape()
}
遵循以上建議,可以確保正確地使用 Kotlin 密封類,避免錯誤和不期望的行為。