Luc*_*aro 2 java java.util.scanner
我注意到,在使用扫描仪时,如果我想设置分隔符或区域设置等属性,则执行此操作的方法会返回对象Scanner本身:
public Scanner useDelimiter(String pattern) {
modCount++;
delimPattern = patternCache.forName(pattern);
return this;
}
Run Code Online (Sandbox Code Playgroud)
我不明白的是,如果属性被更改(而不是创建一个新对象),为什么它会返回一个Scanner对象而不是void?这并不是说我必须将返回值存储在变量中 - 事实上,如果我尝试这样做,就像下面的代码一样,Eclipse 将给出以下消息Resource leak: 'lineScanner' is not closed at this location:
Scanner scanner = new Scanner(new File("accounts.csv"));
String line;
while(scanner.hasNextLine()) {
line = scanner.nextLine();
Scanner lineScanner = new Scanner(line);
lineScanner = lineScanner.useDelimiter(",");
...
}
Run Code Online (Sandbox Code Playgroud)
小智 5
这更多的是为了方便。返回值可以忽略;它只是允许您链接方法以提高可读性。
例如
lineScanner.useDelimiter(",").useLocale(Locale.US).useRadix(10);
Run Code Online (Sandbox Code Playgroud)
这比以下内容更具可读性并且更短
lineScanner.useDelimiter(",");
lineScanner.useLocale(Locale.US);
lineScanner.useRadix(10);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
133 次 |
| 最近记录: |