gpt4 book ai didi

kotlin - 确保在 Kotlin 中初始化 val

转载 作者:行者123 更新时间:2023-12-04 22:19:28 25 4
gpt4 key购买 nike

我在 Java 中有以下方法:

public void doSomething() {
final boolean promote = false;
final String bob;

if (promote) {
try(StringWriter sw = new StringWriter()) {
sw.write("this is a test");
bob = sw.toString();
} catch (IOException e) {
e.printStackTrace();
throw new IllegalStateException();
}
} else {
bob = "anaconda";
}

System.out.println(bob);
}

当我将其转换为 Kotlin 时:
    val promote = false
val bob: String

if (promote) {
try {
StringWriter().use { sw ->
sw.write("this is a test")
bob = sw.toString()
}
} catch (e: IOException) {
e.printStackTrace()
throw IllegalStateException()
}
} else {
bob = "anaconda"
}

println(bob)

但我在最后一行收到编译器错误: Variable 'bob' must be initialized.
当 Java 编译器非常确定变量已被初始化或已抛出异常时,我看不出 Kotlin 如何无法初始化 bob 变量。

bob 更改为 var 并初始化它是我唯一的选择吗?

最佳答案

use 方法的结果分配给变量,如下所示:

bob = StringWriter().use { sw ->
sw.write("this is a test")
sw.toString()
}

Java 编译器能够确定变量将被初始化,因为 try with resources 是一种语言特性。另一方面, use 方法是一个库功能,其行为取决于实际导入和使用的实现。换句话说,Kotlin 编译器无法知道作为参数传递给 use 的函数是否会被立即调用。

关于kotlin - 确保在 Kotlin 中初始化 val,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37936557/

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