Вопрос или проблема
Наша кодовая база на Android, и она нацелена на JDK 17.
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version("0.8.0")
}
java {
toolchain {
languageVersion = JavaLanguageVersion.of(17)
}
}
В кодовой базе активно использовался val
от Lombok, и некоторые инженеры решили пойти дальше и начать использовать var
от Lombok. Теперь у нас есть множество предупреждений компилятора следующего содержания:
предупреждение: начиная с релиза 10, ‘var’ является ограниченным именем типа и не может использоваться для объявления типов или в качестве типа элементов массива
Если мы удаляем одну из строк import lombok.var;
, мы получаем:
ошибка: не удается найти символ
var foo = bar;
^
символ: класс var
Похоже, что предупреждения компилятора не подлежат игнорированию без подавления всех предупреждений компилятора, чего мы не хотим делать. Так как же заставить javac распознать нативный var
?
Ответ или решение
Чтобы устранить проблему с использованием var
из библиотеки Lombok в проекте Android с целевой версией JDK 17, необходимо заменить все вхождения var
, используемого в сочетании с Lombok, на стандартный синтаксис Java, который поддерживает var
начиная с Java 10.
Шаги по решению проблемы:
-
Удалите импорт Lombok
var
:
Убедитесь, что в вашем коде нет строк, таких какimport lombok.var;
. Это ключевой шаг, поскольку использование Lombokvar
конфликтует с стандартным ключевым словомvar
в Java. -
Замените
var
на явные типы:
Везде, где в вашем коде использовалосьvar
, замените его на явное определение типа. Например, вместо:var foo = bar;
Используйте явный тип:
SomeType foo = bar;
Это гарантирует, что ваш код будет компилироваться без использования Lombok, что поможет избежать конфликтов с типом
var
в Java. -
Избегайте повторного использования
var
из Lombok:
Не пытайтесь повторно импортировать или использоватьimport lombok.var;
. Это приведет к конфликтам, так как компилятор не сможет распознать, какие именноvar
вы пытаетесь использовать. -
Проверка и тестирование:
После внесения всех изменений, выполните сборку проекта и запустите все тесты, чтобы убедиться, что никаких новых ошибок не возникло и функциональность приложения осталась прежней. -
Обновление зависимостей:
Убедитесь, что вы используете последнюю версию Lombok и что ваша среда разработки (IDE) поддерживает Java 17. Это поможет в сглаживании любых других проблем, связанных с настройкой проекта. -
Настройка правил компилятора:
Если компилятор все еще выдает предупреждения, убедитесь, что вы не отключаете важные предупреждения. Настройте правила компиляции в настройках вашего проекта, избегая глобального подавления всех предупреждений, так как это может скрыть важные ошибки в коде.
Заключение:
Замена всех случаев использования Lombok var
на стандартный синтаксис Java – наиболее эффективный и безопасный способ решения проблемы. Это обеспечит соответствие кода правилам Java и устранит все конфликты, связанные с использованием имени var
. Убедитесь, что ваш код остается читабельным и поддерживаемым после этих изменений.