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

Kotlin中如何判断对象是否属于指定类型列表?

Kotlin中判断对象是否属于指定类型列表的惯用实现

你想要的e is in listOf(FooException, BarException)这类直接语法在Kotlin里并不支持,因为in运算符的作用是检查对象是否存在于集合中,而集合里的FooException、BarException是类的引用,并非对象实例。下面是几种惯用的实现方式:

1. 直接使用any函数结合KClass.isInstance

这是最直接的写法,通过遍历类型列表,检查对象是否是列表中某类的实例:

// 若需重复使用,可将类型列表提取为变量
val targetExceptionTypes = listOf(FooException::class, BarException::class)

if (targetExceptionTypes.any { it.isInstance(e) }) {
    // 编写你的处理逻辑
}

如果只是单次使用,也可以直接把列表写在判断条件里:

if (listOf(FooException::class, BarException::class).any { it.isInstance(e) }) {
    // 编写你的处理逻辑
}

2. 封装扩展函数简化调用

如果需要多次进行这类判断,可以给Any类型封装一个扩展函数,让调用更简洁直观:

fun Any?.isInstanceOfAny(vararg classes: KClass<*>): Boolean {
    // 处理对象为null的情况,直接返回false
    if (this == null) return false
    return classes.any { it.isInstance(this) }
}

使用时语法接近你最初的设想:

if (e.isInstanceOfAny(FooException::class, BarException::class)) {
    // 编写你的处理逻辑
}

3. 兼容Java类的写法

如果是处理Java类或者需要使用Class类型而非Kotlin的KClass,可以改用Class.isInstance:

if (listOf(FooException::class.java, BarException::class.java).any { it.isInstance(e) }) {
    // 编写你的处理逻辑
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 07:14:54