You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin的when语句中判断对象是否为某类的后代?

在Kotlin中检查对象是否为指定类的后代并在when语句中实现

当然可以,而且Kotlin的is运算符本身就帮你完成了所有继承链的检查——它会自动判断对象是否是指定类**或其任意子类(包括间接子类)**的实例,完全不需要手动遍历祖先类。

看你给出的代码示例,假设KRecyclerView是KView的子类,当前的when逻辑是合理的:

  • 第一个分支会优先匹配KRecyclerView及其所有子类的实例
  • 第二个分支会匹配所有其他KView的后代实例(包括直接子类)
  • 如果都不匹配则抛出异常

举个实际的类继承例子验证:

open class KView
class KRecyclerView : KView()
class KCustomRecyclerView : KRecyclerView() // KView的间接子类

测试代码:

val item1 = KRecyclerView()
val item2 = KCustomRecyclerView()
val item3 = KView()

for (item in listOf(item1, item2, item3)) {
    when (item) {
        is KRecyclerView -> println("处理KRecyclerView或其子类: ${item::class.simpleName}")
        is KView -> println("处理其他KView后代: ${item::class.simpleName}")
        else -> throw IllegalArgumentException("Item has wrong type")
    }
}

输出结果:

处理KRecyclerView或其子类: KRecyclerView
处理KRecyclerView或其子类: KCustomRecyclerView
处理其他KView后代: KView

如果不需要对KRecyclerView做特殊处理,直接保留一个is KView分支即可,它会覆盖所有KView的直接/间接子类实例。

总结:

  • 无需手动遍历继承链,is运算符已经完成了后代类的匹配
  • 完全可以在when语句中实现这种分支判断,且逻辑清晰易维护

内容的提问来源于stack exchange,提问作者Kirill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 13:32:09