Ответ 1
Это новая особенность IntelliJ IDEA 2018.2:
Подчеркивая переназначенные локальные переменные и переназначенные параметры
IntelliJ IDEA теперь по умолчанию подчеркивает переназначенные локальные переменные и переназначенные параметры. Атрибуты для всех языков, поддерживающих эту функцию, которые на данный момент включают Java и Groovy, могут быть изменены в Предпочтения/Настройки | Редактор | Цветовая схема | Язык по умолчанию | Идентификаторы | Переназначен
Почему это может быть полезно?
Если переменная/параметр подчеркнута, вы знаете, что вы не можете использовать ее в лямбда/анонимном классе напрямую.
При чтении очень длинного кода метода, если параметр не подчеркнут, вы точно знаете, что его значение не переназначено нигде в этом методе, и оно содержит точно такое же значение, которое было передано этому методу в любой точке.
Некоторые руководящие принципы кода направлены против переназначенных переменных, и вы можете по возможности избегать их, чтобы поддерживать чистоту кода и облегчить его чтение/отладку.
В настоящее время многие разработчики предпочитают избегать изменяемого состояния и переназначать переменные только в тех редких случаях, когда это действительно необходимо. Мы не хотим вводить неизменяемость вручную, мы предполагаем, что по умолчанию все является неизменяемым, и хотим привлечь дополнительное внимание к случаям, когда что-то не так. Если вы используете final
для пометки неизменяемых переменных, это означает, что вам нужно писать больше кода для обычных случаев и меньше кода в исключительных случаях. (Кстати, в современных языках объявление неизменяемых переменных не требует написания дополнительного кода, но, к сожалению, не в Java).
Брайану Гетцу, архитектору языка Java, также нравится, как IntelliJ IDEA выделяет переназначенные переменные (см. Его твит).