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

Kotlin在forEach中创建两个对象时抛出“Verifier rejected class”错误原因

解决遍历Any列表创建对象时的崩溃问题

首先看你代码里最显眼的风险点:projectId = it.project()?.id()?.toLong()!! 这里的!!操作符——如果it.project()或者it.project()?.id()返回null,这个操作会直接抛出NullPointerException,这大概率就是你程序崩溃的原因。

给你几个具体的解决思路:

1. 安全处理null值,替换!!操作符

不要强制非null断言,而是用?:提供默认值,或者提前判断空值跳过不符合条件的条目:

// 方案一:给null情况设置业务允许的默认值(比如0L,根据你的需求调整)
val projectId = it.project()?.id()?.toLong() ?: 0L

// 方案二:提前判空,直接跳过当前循环条目
projectLogEntries.forEach {
    if (it is ProjectQuery.ProjectLogEntry) {
        val project = it.project() ?: return@forEach // project为空时跳过
        val projectId = project.id()?.toLong() ?: return@forEach // id为空时也跳过
        val projectLogEntry = ProjectLogEntry(
            createdAt = Date(),
            remoteId = it.id()?.toLong(),
            remoteUserId = it.device()?.user()?.id()?.toLong(),
            projectId = projectId,
            comment = "asdf"
        )
        // 第二个新对象的创建也同理处理所有可能的null值
    }
}

2. 从根源减少类型模糊问题

尽量不要使用List<Any>这种模糊类型,如果你能确定列表元素的具体类型范围,比如都是ProjectQuery.ProjectLogEntry,直接定义成List<ProjectQuery.ProjectLogEntry>;如果有多种类型,考虑用密封类/接口来约束,这样能在编译期就发现类型转换和空值的潜在问题。

3. 排查其他null隐患

你代码里的remoteId、remoteUserId也用了?.链式调用,如果后续逻辑里把这些字段当作非null值使用,也可能引发崩溃。建议根据业务需求,要么给这些字段设置默认值,要么在使用前做null校验。

如果能提供崩溃的具体栈跟踪信息,还能更精准定位问题,但目前来看,!!导致的空指针是最可能的元凶。

内容的提问来源于stack exchange,提问作者Jhon Fredy Trujillo Ortega

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:52:55