java - String Scanner java上的资源泄漏
问题描述
在 vscode 中,我收到一条警告,说 Scanner 存在用于扫描 String 的资源泄漏,但不需要关闭 String,那么为什么 vscode 会给我一个警告,我该如何摆脱它?我不想关闭扫描仪,因为那不是必需的。这是一些给出警告的示例代码
new Scanner("somthing to split")
.useDelimiter(Pattern.compile("[ ,\n]"))
.forEachRemaining(System.out::println);
给
Resource leak: '<unassigned Closeable value>' is not closed at this location
解决方案
VSCode 不关心您Scanner
绑定到什么资源。它不会检查您是否真的应该关闭它。
通过使用try -with-resources 语法正确添加或关闭扫描程序来抑制警告:@SuppressWarnings("resource")
try (Scanner scanner = new Scanner(...)) {
...
} // auto-closed here
并非所有警告实际上都是正确的,也有误报,在这种情况下完全可以抑制警告。您可能需要添加评论来解释原因。
另一个相关示例是绑定到 的扫描仪System.in
,它们也不应该关闭。
但这不会使其运行速度变慢吗?我试图不关闭它,因为它是不必要的,但我不想要这个警告
不,不是。即使,我们会在这里谈论几纳秒。不要试图对根本不需要优化的东西进行微优化。如果您认为您有速度问题,请分析您的应用程序,然后您会注意到您的违规者无论如何都是完全不同的。