gpt4 book ai didi

java - 为什么我在包装编写器对象时收到 "potential resource leak"警告?

转载 作者:行者123 更新时间:2023-12-01 18:51:05 25 4
gpt4 key购买 nike

我的 Eclipse 发出以下警告:

Potential resource leak: '<unassigned Closeable value>' may not be closed

...对于表达式 new BufferedWriter(...)在下面的代码片段中:

boolean useStdout = askUserWhetherToUseStdout();
Writer writer = useStdout ? new OutputStreamWriter(System.out) : new BufferedWriter(new FileWriter(new File(askUserForFilename())));
try {
writer.write("Hello World!");
}
finally {
writer.close();
}

这是误报吗?我对整体的理解方式Writer问题是任何作家都会关闭其底层作家。就我而言,writer将封装新的缓冲写入器(进而封装文件写入器),因此关闭 writer不应泄漏与缓冲编写器或其底层编写器关联的任何资源?

我在这里缺少什么?

最佳答案

根据更新的问题编辑答案:

这是一个虚假警告 - 基于三元运算符的使用。如果操作的右侧未触发,则不会创建 BufferedWriter,并且不会发生资源泄漏。所以警告所描述的情况确实是不可能的。但是,如果您想“处理”它,只需将 writer 的创建移到您的 try block 内即可。

boolean useStdout = askUserWhetherToUseStdout();
Writer writer = null;
try {
writer = useStdout ? new OutputStreamWriter(System.out)
: new BufferedWriter(new FileWriter(new File(
askUserForFilename())));
writer.write("Hello World!");
} finally {
if (writer != null)
writer.close();
}

关于java - 为什么我在包装编写器对象时收到 "potential resource leak"警告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15924630/

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