簡體   English   中英

為什么不能將“kotlin.Result”用作返回類型?

[英]Why can't 'kotlin.Result' be used as a return type?

我創建了一個方法,返回的是MyClass<R>類中的Result<R> ,但錯誤信息是: 'kotlin.Result' cannot be used as a return type

我還查看了 Result 源代碼以獲得一些提示; 為什么會這樣?

測試代碼(使用 v. 1.3-RC)。

class MyClass<R>(val r: R) {
    fun f(): Result<R> { // error here
        return Result.success(r)
    }
}

fun main(args: Array<String>) {
    val s = Result.success(1)
    val m = MyClass(s)   
}

來自Kotlin KEEP

這些限制背后的基本原理是,Kotlin 的未來版本可能會擴展和/或更改返回 Result 類型的函數的語義,而 null 安全運算符在用於 Result 類型的值時可能會更改其語義。 為了避免在 Kotin 的未來版本中破壞現有代碼並為這些更改敞開大門,相應的使用現在會產生錯誤。 此規則的例外是標准庫中經過仔細審查的聲明,這些聲明是 Result 類型 API 本身的一部分。

注意:如果您只想試驗Result類型,您可以通過提供 Kotlin 編譯器參數-Xallow-result-return-type來繞過此限制。

在 Java 或 Android 項目上使用 Gradle 時:在 Kotlin 編譯任務上定義編譯器參數。 它適用於生產代碼和測試。

tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile> {
    kotlinOptions {
        freeCompilerArgs = freeCompilerArgs + "-Xallow-result-return-type"
    }
}

在多平台項目上使用 Gradle 時:為每個目標編譯定義編譯器參數。 它適用於生產代碼和測試。

kotlin {
    targets.all {
        compilations.all {
            kotlinOptions {
                freeCompilerArgs = freeCompilerArgs + "-Xallow-result-return-type"
            }
        }
    }
}
android {
    kotlinOptions {
        freeCompilerArgs = ["-Xallow-result-return-type"]
    }
}

如果你使用android這個gradle這個解決方案

如果使用 Maven:

<plugin>
    <artifactId>kotlin-maven-plugin</artifactId>
    <configuration>
        <jvmTarget>1.8</jvmTarget>
        <args>
            <arg>-Xallow-result-return-type</arg>
        </args>
    </configuration>
    <groupId>org.jetbrains.kotlin</groupId>
    <version>${kotlin.version}</version>

如果使用gradle:

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
    kotlinOptions.freeCompilerArgs = ["-Xallow-result-return-type"]


}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
    kotlinOptions.freeCompilerArgs = ["-Xallow-result-return-type"]
}

資料來源: http : //rustyrazorblade.com/post/2018/2018-12-06-kotlin-result/

將 kotlin 版本更新到 1.5 或更高版本。 看:

提案截圖 https://github.com/Kotlin/KEEP/blob/master/proposals/stdlib/result.md#limitations-legacy

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM