gpt4 book ai didi

java - 为什么 "return"在 Kotlin 中可以返回 "return"?

转载 作者:IT老高 更新时间:2023-10-28 13:33:37 25 4
gpt4 key购买 nike

这个问题听起来很傻,但里面没有错字。

fun test(): Any {
return return true
}

这在 Kotlin 中实际上是可能的。虽然编译器警告

Unreachable code

用于外部返回。但这只是一个警告。

我不想将 Java 与 Kotlin 进行比较,但我很感兴趣在 Java 中是否同样适用。

public class Test {
// ...
static int test() {
return return 1;
}
}

没有!

/Test.java:8: error: illegal start of expression
      return return 1;
                 ^
/Test.java:8: error: not a statement
      return return 1;
                           ^
2 errors

为什么要这样设计 Kotlin?

最佳答案

return是 Kotlin 中的表达式,返回类型为 Nothing ,作为所有其他类型的子类型的类型。例如,这使您能够以类型安全的方式执行此操作,而无需额外的 null 行。检查:

fun getInt(): Int? = ...

fun printInt() {
val int: Int = getInt() ?: return
println(int)
}

getInt() ?: return 的类型可以是Int在这里,因为这是 Elvis 运算符两侧最接近的公共(public)父类(super class)型,这要感谢 NothingInt 的子类型.

同样的情况也适用于 throw ,您也可以巧妙地与 Elvis 一起使用运算符来指示您要取消对 null 的执行值而不必担心以后的类型。

这导致了一个奇怪的怪癖,比如

fun x(): Int {
return return throw return throw throw return 0
}

是有效的语法,因为 Nothing type 使每个表达式都有效地从右到左读取。实际会发生的是 return 0正如编译器警告的那样,将执行并且永远不会到达其余代码。

关于java - 为什么 "return"在 Kotlin 中可以返回 "return"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48310136/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com