MST
星途 面试题库

面试题:Kotlin中密封类与when表达式的基础应用

请举例说明Kotlin中密封类的定义方式,以及如何结合when表达式实现对密封类不同子类型的处理。假设你有一个表示不同几何图形的密封类,如圆形、矩形和三角形,用代码展示如何在when表达式中对这些不同图形类型进行特定操作(比如计算面积)。
33.3万 热度难度
编程语言Kotlin

知识考点

AI 面试

面试题答案

一键面试
// 定义密封类
sealed class Shape {
    // 圆形子类
    data class Circle(val radius: Double) : Shape() {
        fun calculateArea() = Math.PI * radius * radius
    }

    // 矩形子类
    data class Rectangle(val width: Double, val height: Double) : Shape() {
        fun calculateArea() = width * height
    }

    // 三角形子类
    data class Triangle(val base: Double, val height: Double) : Shape() {
        fun calculateArea() = 0.5 * base * height
    }
}

fun main() {
    val shapes: List<Shape> = listOf(
        Shape.Circle(5.0),
        Shape.Rectangle(4.0, 3.0),
        Shape.Triangle(6.0, 4.0)
    )

    shapes.forEach { shape ->
        val area = when (shape) {
            is Shape.Circle -> shape.calculateArea()
            is Shape.Rectangle -> shape.calculateArea()
            is Shape.Triangle -> shape.calculateArea()
        }
        println("The area of the ${shape::class.simpleName} is $area")
    }
}
  1. 密封类定义
    • 使用sealed class关键字定义了Shape密封类。
    • 它有三个子类CircleRectangleTriangle,这些子类必须在密封类内部或与密封类在同一文件中定义。
  2. when表达式处理
    • main函数中,创建了一个包含不同形状对象的列表。
    • 使用forEach遍历列表,在when表达式中,通过is关键字判断对象的具体类型,然后调用相应的calculateArea方法计算面积。这样可以对密封类的不同子类型进行特定操作。