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

调用invalidDestination.clear()清空列表后仍显示历史错误如何解决

问题原因
  • 核心原因:全局错误存储集合未清空
    你代码中定义的validationErrors是类级别的成员可变集合,所有校验产生的错误都会追加存入这个集合,你仅清空了单次校验使用的局部列表invalidDestination,从未清空过validationErrors,所以每次返回的错误都会携带历史记录。
  • 逻辑缩进问题
    你当前的if判断未添加花括号,导致invalidDestination.clear()不属于if分支的执行范围,不管是否触发错误都会执行,不过该问题不是你当前报错的核心诱因。
  • 潜在代码缺陷
    校验方法入参为configTypeBuilderList列表,但代码中直接使用了未遍历的configTypeBuilder变量,没有循环处理列表中的所有元素,可能导致后续校验结果不符合预期;另外方法名validateConfigTypeBduilder存在拼写错误,建议修正为validateConfigTypeBuilder降低后续维护成本。
修复方案

推荐直接在校验方法入口添加历史错误清空逻辑即可解决你的问题,参考修改后的代码:

private val validationErrors = mutableSetOf<ValidationError>()

private fun validateConfigTypeBuilder(configTypeBuilderList: List<ConfigTypeBuilder>, ruleAttributes: List<String>, destinationFieldList: List<String>) {
    validationErrors.clear() // 新增:每次校验前清空历史错误
    if (ruleAttributes.isNotEmpty()) {
        val invalidDestination = mutableListOf<String>()
        for (destinationField in destinationFieldList) {
            if (!ruleAttributes.contains(destinationField)) {
                invalidDestination.add(destinationField)
            }
        }
        // 补充if分支花括号避免逻辑歧义,原firstOrNull判断可简化为contains
        if (invalidDestination.contains(configTypeBuilder.destinationField)) {
            addValidationError("someMessage", "someMessage", "$ADD_FIELDS $invalidDestination")
        }
        // 无需手动clear invalidDestination,作为方法局部变量会在方法执行结束后自动回收
    }
}

private fun addValidationError(fieldPath: String, field: Any, error: String) {
    logDataPathValidationError(fieldPath, field, error)
    validationErrors.add(
        ValidationError(
            fieldPath,
            error
        )
    )
}

internal fun logDataPathValidationError(dataPath: String, value: Any?, constraint: String) {
    logger.info("{} {} value violates {} constraint", dataPath, value, constraint)
}

如果你的业务是多线程并发校验场景,不建议用成员变量存储校验错误,可以改为将校验错误集合作为方法返回值返回,避免多线程数据互相干扰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:36:03