Комментарии 29
case classes
в Scala, то они всегда иммутабельные. Records в Java таким свойством не обладают. А в остальном похожий подход.Но все-таки лучше все делать иммутабельным.
Я конечно очень люблю скалу, но все-таки. По умолчанию в кейс классах свойства val, но можно явно написать var и будет сгенерирован сеттер. А вот в рекордах, насколько я понял JEP, все поля как раз таки генерируются как final.
Ближе к kotlin, а вообще хорошая идея.
Не джавист. Но выскажусь)
Подобный синтаксический сахар позволяет сделать все быстро(если не сказать побыстрее), в ущерб качеству. Пока ты пишешь вручную все эти «рутинные строки» кода, у тебя есть время подумать о названиях, типах, лучших решениях — ты «вкладываешь душу».
В-вторых, статья немного приоткрывает «внутренности» и возможности «донастройки» стандартного решения.
Кто не хочет писать руками геттеры и сеттеры, уже давно этого не делает. Это делает Lombok.
То, что описано в статье Lombok делает без всяких глюков.
Все таки Lombok — это дополнительная зависимость, может быть дополнительная головная боль, когда надо только всего лишь Record
+ Record будет работать с pattern matching механизмом в будущем (в 14еа можно пощупать на instanceof)
Но и это уже серьезный шаг для такой платформы как Java (backward compatibility, libs compatibility, next features roadmap: pattern matching etc.).
Нам же Lombok не запрещают, когда нужна тяжелая артиллерия :)
Пожалуй, самое заметное ограничение с записями в том, что нельзя объявлять собственные поля. Что в свою очередь означает, что нельзя сделать "ленивые" свойства, по аналогии с lazy val
в Scala или by lazy
в Kotlin. И в скале, и в котлине я регулярно пользуюсь этими фичами, очень жаль что в джаве эквивалент с записями сделать не получится :(
Java 14 Feature Spotlight: Records
Да, замена ломбока на готовые инструменты языка — это очень хорошо.
А чем это хорошо? Ломбок таким образом всё равно не заменишь, он делает сильно больше, чем java records. Инлайн классы — вот они точно нужны, ради них можно перейти на новую версию джавы, а рекорды заменяются аннотациями "@Value" и "@AllArgsConstructor"
Спасибо за перевод, небольшой + в копилку знаний. Интересно, как скоро проекты будут переводить на java 14?)
Java Records (JEP 359)