有趣的情况。我有一段代码创建了几个 ZipOutputStreams。在我什至考虑写任何东西之前作为安全检查,我检查我的输出流是否已正确初始化:
ZipOutputStream countStream = null;
File countFile = null;
// other files
try {
countFile =
new File(savePath.getCanonicalPath() + savePath.separator + outputTag
+ "_COUNT_OUTPUTS.zip");
// other files
} catch (Exception e) {
outputLog.add("UNABLE TO FIND SAVE PATH");
return util.FILE_INVALID;
}
try {
// prepare outputs
if (countFile.exists() == true) {
countFile.delete();
} else {
}
countStream = new ZipOutputStream(new FileOutputStream(countFile));
// other files
} catch (Exception e) {
e.printStackTrace();
outputLog.add("UNABLE TO CREATE OUTPUT FILES");
return util.FILE_SAVE_FAIL;
}
if (countStream == null) {
outputLog.add("UNABLE TO CREATE OUTPUT FILES");
return util.FILE_SAVE_FAIL;
} else {
}
我没有特别看出这段代码的问题出在哪里,但它会在空测试中引发警告:“空比较总是产生错误:变量 countStream 在这个位置不能为空”。据我所见,我将一个变量初始化为 null,然后尝试创建输出流,但不能保证会发生。忽略警告很容易,但我更想知道编译器是如何得出可以保证成功创建 countStream 的结论
巴拉德