这是我的代码:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;
public class temp {
public static void main(String[] args) throws FileNotFoundException {
BufferedReader a = new BufferedReader(new FileReader("a"));
Scanner scanner = new Scanner(a).useDelimiter(",");
scanner.close();
}
}
我在使用 new Scanner(a)
时收到一个警告(我正在使用 jdk1.7.0_05 进行编译):
Resource leak: '<unassigned Closeable value>' is never closed.
我是做错了什么,还是这只是一个错误的警告?
useDelimiter
的实现返回的不是this
,那么即使使用这种解决方案也会有泄漏的风险。虽然useDelimiter
的返回值从未被关闭,但情况已经很糟糕了。如果你不知道函数返回什么,那么没有办法防止这种泄漏,除非你进行双重关闭或类似的坏事。 - Earth EngineuseDelimiter
的名称和接口设计不太好。如果它的名称叫做setDelimiter
,并且返回类型像其他类似方法一样是void
,这将不再是一个问题。 - Earth Engine