Netbeans警告:需用try-with-resources处理NewOutputStream的super.close()
解决Netbeans中NewOutputStream.close()的警告问题
你遇到的警告是因为Netbeans检测到super.close()可能无法被可靠执行(比如前面的put操作抛出异常时),而你尝试的try (super)写法不符合语法——try-with-resources要求传入具体的资源实例变量,不能直接使用super。
修改方案
调整NewOutputStream类的close()方法,用try-finally结构确保父类的close()方法总是被调用,同时规范处理内部的ByteArrayOutputStream:
@Override public void close() throws IOException { try { // 将字节数组存入Map this.linkedHashMap.put(this.string, this.byteArrayOutputStream.toByteArray()); // 显式关闭内部流(虽ByteArrayOutputStream的close是空实现,但符合资源管理规范) this.byteArrayOutputStream.close(); } finally { // 确保父类close()无论如何都会执行 super.close(); } }
修改原因
try-finally结构保证了super.close()不会因前面操作抛出异常而被跳过,满足资源清理的可靠性要求;- 显式关闭内部流遵循IO资源管理规范,能消除工具的潜在警告;
- 替代了语法错误的
try (super)写法,从根源解决警告问题。
完整修改后的NewOutputStream类
private static class NewOutputStream extends OutputStream { private final String string; private final LinkedHashMap<String,byte[]> linkedHashMap; private final ByteArrayOutputStream byteArrayOutputStream; private NewOutputStream(String string,LinkedHashMap<String,byte[]> linkedHashMap) { this.string = string; this.linkedHashMap = linkedHashMap; this.byteArrayOutputStream = new ByteArrayOutputStream(); } @Override public void write(int intValue) { this.byteArrayOutputStream.write(intValue); } @Override public void close() throws IOException { try { this.linkedHashMap.put(this.string, this.byteArrayOutputStream.toByteArray()); this.byteArrayOutputStream.close(); } finally { super.close(); } } }
内容的提问来源于stack exchange,提问作者someone
相关产品推荐
相关产品推荐

