【问题标题】:Kotlin Result type with generics and Void/Nothing return type具有泛型和 Void/Nothing 返回类型的 Kotlin 结果类型
【发布时间】:2019-08-07 12:55:25
【问题描述】:

我正在尝试使用 Kotlin 的 [Result][1] 类型。尽管在成功的情况下它不会返回任何值。我无法让它返回值。以下行给我带来了麻烦:complete(Result.success())。它不编译。我尝试了Result<Void>Result<Nothing>,但无法正常工作。

关于如何使它工作的任何建议?

package me.test.app

import android.util.Log

class Test {

    fun foo(complete: (Result<Nothing>) -> Unit) {
        if (Math.random() > 0.5) {
            complete(Result.success())
        } else {
            complete(Result.failure(Throwable("too low")))
        }
    }

    fun bar() {
        foo { result ->
            result.fold({
                Log.i("APP", "Success")
            })
            {
                Log.i("APP", "Failure")
            }
        }
    }
}

【问题讨论】:

    标签: android generics kotlin


    【解决方案1】:

    你必须使用Result&lt;Unit&gt;。然后你可以像这样调用complete

    complete(Result.success(Unit))
    

    【讨论】:

    • 另一个选项可能是使用Nothing?Void? 作为类型并使用Result.success(null) 完成它。虽然这取决于偏好并且使用 Unit 更清洁 imo
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 2019-07-02
    相关资源
    最近更新 更多