Kotlin 密封類(sealed class)是一種限制其子類的類。它可以幫助我們更好地處理復雜的業務場景,例如狀態機、訪問控制等。以下是如何使用 Kotlin 密封類應對復雜業務場景的一些建議:
sealed class State {
data class Active(val value: Int) : State()
data class Inactive(val value: Int) : State()
}
fun processState(state: State) {
when (state) {
is State.Active -> println("處理活躍狀態: ${state.value}")
is State.Inactive -> println("處理非活躍狀態: ${state.value}")
}
}
internal
或 private
關鍵字來限制類成員的可見性。但是,對于密封類,我們還可以使用 sealed
關鍵字來確保只有特定的子類可以繼承它。這有助于實現更嚴格的訪問控制,特別是在處理敏感數據或實現內部 API 時。sealed class User {
data class Registered(val id: Int, val name: String) : User()
data class Unregistered(val id: Int, val name: String) : User()
// 內部 API,只能在 User 密封類及其子類中訪問
sealed class InternalApi {
data class GetUserDetails(val userId: Int): InternalApi()
}
}
sealed class Shape {
data class Circle(val radius: Double) : Shape()
data class Rectangle(val width: Double, val height: Double) : Shape()
}
fun calculateArea(shape: Shape): Double {
return when (shape) {
is Shape.Circle -> Math.PI * shape.radius * shape.radius
is Shape.Rectangle -> shape.width * shape.height
}
}
總之,Kotlin 密封類可以幫助我們更好地處理復雜的業務場景,通過限制子類的數量和可見性,確保狀態轉換的合法性,以及防止意外創建不符合預期的對象。