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

Kotlin Multiplatform中如何从fold闭包返回User对象?

解决fold方法返回类型不匹配问题

你的问题出在fold方法的类型约束上:fold要求onSuccess和onFailure两个lambda必须返回相同类型。你当前的代码里,onSuccess返回了User,但onFailure没有返回对应类型(默认返回Unit),导致fold整体的返回类型被推断为Unit,和函数声明的User返回类型冲突,所以报错。

要修复这个问题,你需要让fold的两个分支都返回User类型(或者在失败分支抛出异常,因为此时无法返回合法的User实例),然后让函数直接返回fold的结果。修正后的代码如下:

suspend fun getUser(accessToken: String): User {
    return provider.getUser(accessToken).fold(
        onSuccess = {
            print("login")
            val user = User.populateUserDetails(it)
            currentUser = user
            user // 明确返回User实例
        },
        onFailure = {
            print(it.message)
            throw it // 抛出异常,终止执行并将异常传递给上层
        }
    )
}

关键说明:

  • 移除了return@fold,改为直接在onSuccess lambda中返回user,这样fold的返回类型就是User
  • 在onFailure分支抛出异常,因为当获取用户失败时,无法构造合法的User实例,抛出异常是符合函数返回User(非空)的设计逻辑的
  • 函数直接返回fold的执行结果,这样整个函数的返回类型就和声明一致了

如果你的业务允许返回空值,也可以将函数返回类型改为User?,此时onFailure分支返回null即可:

suspend fun getUser(accessToken: String): User? {
    return provider.getUser(accessToken).fold(
        onSuccess = {
            print("login")
            val user = User.populateUserDetails(it)
            currentUser = user
            user
        },
        onFailure = {
            print(it.message)
            null // 返回null表示获取失败
        }
    )
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:33:21