在 Kotlin 中,密封類(sealed class)是一種限制其子類的類。這意味著密封類只能有一組預定義的子類。這有助于減少不必要的類型判斷,因為編譯器可以確保在處理密封類時只考慮這些預定義的子類。
要減少不必要的類型判斷,你可以遵循以下最佳實踐:
// 使用密封類替換抽象類
sealed class Shape {
data class Circle(val radius: Double) : Shape()
data class Rectangle(val width: Double, val height: Double) : Shape()
}
fun getArea(shape: Shape): Double {
return when (shape) {
is Shape.Circle -> Math.PI * shape.radius * shape.radius
is Shape.Rectangle -> shape.width * shape.height
}
}
避免使用 is 運算符:盡量避免在運行時使用 is 運算符來檢查密封類的子類。相反,盡量使用 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}")
}
}
遵循這些最佳實踐,你可以充分利用 Kotlin 密封類來減少不必要的類型判斷,從而提高代碼的可讀性和性能。