Java Scanner со строковым вводом должен быть закрыт?

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

Scanner scanner = new Scanner("simple string")

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

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
102
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Как указано в документе Sonar,

Connections, streams, files, and other classes that implement the Closeable interface or its super-interface, AutoCloseable, needs to be closed after use.

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

Обратитесь к этому связь.

Ответ принят как подходящий

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

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

public Scanner(String source) {
    this(new StringReader(source), WHITESPACE_PATTERN);
}

Но разве нужно закрывается? Похоже, что StringReader не содержит никаких ресурсов, которые необходимо высвободить. Глядя на исходный код, метод close() просто устанавливает ссылку, которую он имеет, на String на null.

Slaw 04.04.2019 13:25

@Slaw Вероятно, нет, но именно поэтому Sonar жалуется, поскольку он реализует интерфейсы Closeable.

Murat Karagöz 04.04.2019 13:40

извините, но я действительно запутался, нужно ли закрывать или я отмечу это как ложное срабатывание и не закрою?

user9449907 04.04.2019 15:11

@user9449907 user9449907 Закройте его, чтобы оставаться последовательным.

Murat Karagöz 04.04.2019 15:17

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

Другие вопросы по теме