Java Сканер «неназначенное закрываемое значение» никогда не закрывается [Eclipse] - PullRequest
1 голос
/ 14 июля 2020

Каждый раз, когда я набираю сканер как «вложенную строку», он предупреждает меня, что [Утечка ресурса: «неназначенное закрываемое значение» никогда не закрывается], и посоветовал мне добавить @SuppressWarnings("resource") вверху.

Правильно ли просто добавить @SuppressWarnings("resource"), как он советует, или есть другой способ, более предпочтительный?

public static void main(String [] args){
    String name = new Scanner(System.in).nextLine();    
    System.out.printf("My name is %s", name);
}

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Вы можете использовать конструкцию try-with-resource, как показано ниже:

try(Scanner scanner = new Scanner(System.in)){
        String name = scanner.nextLine();
        System.out.printf("My name is %s", name);
    }

Сканер - это ресурс, и его необходимо закрыть. Либо закройте его вручную, вызвав метод close () в блоке finally, либо используйте try-with-resource, как указано выше, чтобы он автоматически закрыл ресурс.

0 голосов
/ 14 июля 2020

Ваша IDE, вероятно, предупреждает вас о том, что вы не вызываете close(), потому что Scanner реализует Closable. Поскольку вы не хотите закрывать System.in, подавите предупреждение и забудьте о нем. Вы можете проверить настройки вашей IDE, чтобы узнать, о чем она должна предупреждать (resource). Это просто не обнаруживает, что сканер использует System.in.

IntelliJ IDEA? Вероятно, вы активировали один или несколько из них:

Preferences -> Editor -> Inspections -> Resource management -> ...

введите описание изображения здесь

...