Kotlin 密封類(sealed class)是一種限制其子類的類。它主要用于表示限定的類繼承結(jié)構(gòu),以避免出現(xiàn)不受控制的類繼承。密封類在 Kotlin 中的主要作用如下:
限制子類數(shù)量:密封類只允許一定數(shù)量的子類,這有助于確保代碼的可維護(hù)性和可讀性。通過(guò)使用密封類,您可以更好地控制程序中的類之間的關(guān)系和結(jié)構(gòu)。
提高類型安全性:由于密封類限制了子類的數(shù)量,因此可以避免出現(xiàn)不受控制的類繼承。這有助于提高代碼的類型安全性,減少潛在的錯(cuò)誤。
使用 when
表達(dá)式進(jìn)行模式匹配:密封類可以與 Kotlin 的 when
表達(dá)式一起使用,以便更簡(jiǎn)潔地處理多種情況。當(dāng)您需要根據(jù)不同的子類執(zhí)行不同的操作時(shí),when
表達(dá)式可以簡(jiǎn)化代碼并提高可讀性。
下面是一個(gè)簡(jiǎn)單的 Kotlin 密封類示例:
// 定義一個(gè)密封類 Shape
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()
}
fun area(shape: Shape): Double {
return when (shape) {
is Shape.Circle -> Math.PI * shape.radius * shape.radius
is Shape.Rectangle -> shape.width * shape.height
is Shape.Triangle -> 0.5 * shape.base * shape.height
}
}
fun main() {
val circle = Shape.Circle(5.0)
val rectangle = Shape.Rectangle(4.0, 6.0)
val triangle = Shape.Triangle(3.0, 7.0)
println("Circle area: ${area(circle)}")
println("Rectangle area: ${area(rectangle)}")
println("Triangle area: ${area(triangle)}")
}
在這個(gè)示例中,我們定義了一個(gè)名為 Shape
的密封類,它具有三個(gè)子類:Circle
、Rectangle
和 Triangle
。然后,我們使用 when
表達(dá)式根據(jù)不同的子類計(jì)算面積。