为什么不能将“ kotlin.Result”用作返回类型

时间:2018-10-03 16:36:22

标签: function kotlin return-type

我已经创建了一个方法,并且在Result<R>类中返回的是MyClass<R>,但是错误消息是'kotlin.Result'不能用作返回类型

我也研究了Result源代码中的一些提示;为什么会这样?

在这里测试代码(使用1.3-RC版):https://try.kotlinlang.org/#/UserProjects/ueeogpr0cqnovot7o4ooa42dv5/l9qidpqj9pf1i7rablka4u5qjt

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)   
}

4 个答案:

答案 0 :(得分:26)

来自Kotlin KEEP

  

这些限制背后的原因是,未来版本的   Kotlin可能会扩展和/或更改返回的函数的语义   结果类型和null安全运算符可能会在以下情况下更改其语义   用于Result类型的值。为了避免打破现有   Kotin未来版本中的代码,并为那些   更改后,相应的用途现在会产生错误。的例外   该规则适用于标准中经过仔细审查的声明   库是Result类型API本身的一部分。

注意:如果您只想尝试Result类型,可以通过提供Kotlin编译器参数-Xallow-result-return-type来绕过此限制。

答案 1 :(得分:4)

android {
    kotlinOptions {
        freeCompilerArgs = ["-Xallow-result-return-type"]
    }
}

如果您使用的是android的gradle解决方案

答案 2 :(得分:2)

答案 3 :(得分:1)

如果使用maven:

DateTimeFormatter

如果使用gradle:

<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>

来源:http://rustyrazorblade.com/post/2018/2018-12-06-kotlin-result/