我已经创建了一个方法,并且在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)
}
答案 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)
将 kotlin 版本更新至 1.5 或更高版本。见:
https://github.com/Kotlin/KEEP/blob/master/proposals/stdlib/result.md#limitations-legacy
答案 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/