如何将具有空条件检查的Java代码转换为Kotlin

时间:2019-07-17 23:44:06

标签: 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)
}

1 个答案:

答案 0 :(得分:2)

问题在于:

var fos: FileOutputStream?;

...是您没有将其初始化为任何东西。 (Java会以同样的方式抱怨未初始化的类型。)

您可以将其初始化为null:

var fos: FileOutputStream? = null

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