java - 如何将带有 null 条件检查的 java 代码转换为 Kotlin

标签 java kotlin

最近我正在尝试将 Java 代码片段转换为 Kotlin。我在此代码中有一个特殊需要,即仅在满足某些条件时初始化对象,并且如果不需要初始化它,我不知道如何获得此初始化的副作用(获取空的新文件)。 然而 Kotlin 不允许不进行初始化。 有人有任何想法来解决这个问题吗?谢谢

Java代码

FileOutputStream fos = null;
for (...) {
    if (condition met) {
        if (fos == null) {
            fos = new FileOutputStream(filename);
        }
        fos.write(something);
    }
}

我尝试过的 Kotlin 代码:

var fos: FileOutputStream?;
for (...) {
    if (condition met) {
        if (fos == null) { // compiler error: not initialized
            fos = FileOutputStream(filename);
        }
    }
    fos.write(something)
}  

还有这个

var fosCreated: Boolean = false;
var fos: FileOutputStream?;
for (...) {
    if (condition met) {
        if (!fosCreated) { // compiler error: not initialized
        fos = FileOutputStream(filename);
        fosCreated = true;
    }
    fos.write(something)
}

最佳答案

问题在于:

var fos: FileOutputStream?;

...是您没有将其初始化为任何内容。 (Java 会以同样的方式提示未初始化的类型。)

您可以简单地将其初始化为 null:

var fos: FileOutputStream? = null

正如您在评论中发现的那样,您需要确保使用 fos?.write() 而不是 fos.write() 来满足 Kotlin's null safety features

关于java - 如何将带有 null 条件检查的 java 代码转换为 Kotlin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57085320/

相关文章:

java - 小部分 JSON 的自定义处理

java - 为具有不同参数的方法设计接口(interface)

android - Extension Class中的Coroutine Channel不收发数据

java - 如何获取 URL 的路径

java - 为什么 "else"在 "if x then return"之后很少使用?

android - 带有 Flowable 的房间 : initialize database if it's empty

design-patterns - KeyNotFoundException 与在 Kotlin 中返回 null

spring-boot - Kotlin spring-boot @ConfigurationProperties

kotlinx.coroutines 基本示例无法识别 GlobalScope.launch 提供的 CoroutineScope

java - 通过 Maven 运行时,Checkstyle 可以定位特定文件吗?