我们有一个API服务调用,它返回一组验证消息.每条消息中都有一个包含错误代码的字符串.

我们的实现将验证字符串转换为枚举值,然后处理枚举,因为有一些我们不关心的错误代码.

问题变成了,如何以Kotlin的方式处理消息循环:

response.validationErrors?.forEach {
    val mediaFailure = decodeValidationMessage(it.message)

    if (mediaFailure != MediaFailure.Unknown) {
        return when (mediaFailure) {
            MediaFailure.Encrypted -> DomainResponse(ErrorReasonCode.ERR_DOCUMENT_ENCRYPTED)
            MediaFailure.NotSupported -> Response.validationFailed()
            MediaFailure.InternalError -> Response.serviceFailed()
            else -> throw NotImplementedError()
        }
    }
}

在这里,我们遍历所有消息,一旦消息错误不是"未知的",它就向调用者返回必要的响应.

然而,IntelliJ想要else的路径,尽管if阻止了这种情况的发生.

有没有一种适当的Kotlin方法来实现这种循环?

推荐答案

据我所知,您希望返回前mediaFailure个不是MediaFailure.Unknown的响应,并且您不希望在函数中包含这throw NotImplementedError()个部分. 解决此问题的一种方法是删除if条件,并在找到MediaFailure.Unknown时继续forEach循环.

response.validationErrors?.forEach {
    val mediaFailure = decodeValidationMessage(it.message)

    return when (mediaFailure) {
        MediaFailure.Encrypted -> DomainResponse(ErrorReasonCode.ERR_DOCUMENT_ENCRYPTED)
        MediaFailure.NotSupported -> Response.validationFailed()
        MediaFailure.InternalError -> Response.serviceFailed()
        MediaFailure.Unknown -> return@forEach // continue the loop
    }
}

Kotlin相关问答推荐

Kotlin—列出具有不同T的列表之间的操作'

映射中列表类型的Kotlin可空接收器?

在Kotlin 有更好的结合方式?

为什么不';Kotlin是否在数据类构造函数中隐式分配null值可为null的字段?

如何在操作系统版本上正确获取Room数据库的路径>;=26 sdk?

房间数据库操作中的协程取消

Kotlin - 什么时候和什么时候不喜欢内联函数,为什么?

try 一次性插入多条记录时,JOOQ连接为空错误

Kotlin 函数中接收者和参数的类型相同

如果带注释的成员未被特定块包围,则发出 IDE 警告

如何将jooq multiset的结果映射到Hashmap(Java Map)?

如何从kotlin中的ArrayList中删除所有元素

Moshi:解析单个对象或对象列表(kotlin)

如何在 IntelliJ 中更改 Kotlin 的this property has a backing field代码编辑器突出显示?

Kotlin 中的 Java Scanner 相当于什么?

未在IntelliJ IDEA上运行临时文件

将多个 Kotlin 流合并到一个列表中,而无需等待第一个值

如果kotlin已经有了getter和setter,为什么在数据类中有componentN函数?

通过在 kotlin-gradle 中使用子项目Unresolved reference: implementation

可以在函数参数中使用解构吗?