Java сканер со строковым вводом должен быть закрыт? - PullRequest
3 голосов
/ 04 апреля 2019

Сонар жалуется, что сканер всегда должен быть закрыт, верно?

Scanner scanner = new Scanner("simple string")

Этот сканер не сканирует из файла и т. Д. Почему он должен быть закрыт?

Ответы [ 3 ]

1 голос
/ 04 апреля 2019

При вызове new Scanner("string") создается StringReader, который создает поток символов.Поэтому вы должны закрыть его.

См. Исходный код OpenJDK

public Scanner(String source) {
    this(new StringReader(source), WHITESPACE_PATTERN);
}
1 голос
/ 04 апреля 2019

Как указано в Sonar doc,

Соединения, потоки, файлы и другие классы, которые реализуют Закрываемый интерфейс или его суперинтерфейс, AutoCloseable, должен быть закрыто после использования.

И Scanner реализует интерфейс Closeable. Следовательно это должно быть закрыто.

Ссылка ссылка .

0 голосов
/ 04 апреля 2019

Нет необходимости закрывать сканер, но лучше сделать это, чтобы высвободить ресурсы, выделенные для сканера, для оптимизации вашего кода и сделать его более быстрым и эффективным.

...