如何在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
相关产品推荐
相关产品推荐

