最近,我正在尝试将Java代码段转换为Kotlin。我在此代码中有一个特殊需要,即仅在满足某些条件时才初始化对象,并且如果不需要初始化该对象,我不会得到这种初始化的副作用(获取一个空的新文件)。 但是Kotlin不允许不进行初始化。 有人有解决这个问题的想法吗?谢谢
FileOutputStream fos = null;
for (...) {
if (condition met) {
if (fos == null) {
fos = new FileOutputStream(filename);
}
fos.write(something);
}
}
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)
}
答案 0 :(得分:2)
问题在于:
var fos: FileOutputStream?;
...是您没有将其初始化为任何东西。 (Java会以同样的方式抱怨未初始化的类型。)
您可以将其初始化为null:
var fos: FileOutputStream? = null
正如您在评论中发现的那样,您需要确保使用fos?.write()
而不是fos.write()
来满足Kotlin's null safety features。