Pull to refresh

Comments 31

Можно применить delombok и постепенно переписывать на kotlin.
А мне вот интересно зачем тривиальные геттеры/сеттеры?
безопасность обращения к переменным.
И в чем же безопасность проявляется? Ну возьмем например класс Movie из второго рисунка. Чем тривиальный геттер безопаснее public final поля?

Как вариант, поля не final, потому что где-то внутри класса модифицируются (мы ведь не видим весь класс, верно?), но снаружи менять их по очевидным причинам нельзя.

final — ничем. Но только если final. Lombok все же неамного шире.
Вот интересно, что в C++ даже в Core Guidelines призывают не использовать геттеры/сеттеры, а использовать структуры (CoreGuidelines)
В результате, в классах есть ну максимум один геттер/сеттер, а все остальное — это нормальные методы с нормальными именами, выполняющие нетривиальную функциональность. Неужели в яве с этим такие проблемы?
тоже понемногу двигаются в сторону property и подобного. давно двигаются.
А для java нет гайдлайна, или я не нашел :(
ИМХО, один из важнейших недостатков Java в сравнении с C# это отстутствие автопропертей. Весь этот геттеро-сеттерный бойлерплейт дико замусоривает классы и по размеру сравним иной раз с кодом, реализующим функциональность.

В общем-то, это как раз одна из причин, почему люди выбирают Kotlin.

Проверил еще раз — в слове «Java» в своем комментарии ошибок не обнаружил.

В Kotlin есть data-классы, можно было воспользоваться ими)

обещают реализовать. давно уже обещают :)

Мораль проста — не используйте Lombok. Я сейчас на большом проекте, где он используется, и за полгода им так и не проникся. В тривиальных случаях он помогает избавиться от нескольких строк бойлерплейта, но как-то это недостаточно весомая причина для +1 источника магии в коде.

Возможно в вашем проекте он не так уж и обходим.
Например у меня много микро-сервисов. В не которых из них могут быть поджо на десятки полей. Классы могут инжектиться до десятком (очень редко конечно) сервисов.
В первом случае писать толпу гетр сетеров во втором случае писать конструктор на несколько параметров и поддерживать его при изменениях кода.
А так же отличный фукционал генерации статик конструкторов и билдеров.
В целом на ломбок очень даже подходит на бэкенд задачах с толпой логики и энтетей.

Так ведь вместо кучки геттеров-сеттеров можно использовать public поля.

писать толпу гетр сетеров

Вы так говорите, словно это проблема. В современных IDE есть генераторы геттеров/сеттеров и даже в простом текстовом редакторе с этой задачей на ура справится банальный поиск с заменой. Два у нас поля или двадцать особой роли не играет.

Пример на скриншоте c Movie по идее должен отлично заменяться data классом

Как я понимаю, автор воспользовался котлином как Java с улучшенным синтаксисом, без его плюшек, хотя я могу ошибаться, я не пишу на котлине.

Этот класс написан на джаве, не на котлине
В смешивании файлов Kotlin и Java без чёткого разделения есть много других недостатков.

Это каких? Могли бы привести конкретные примеры? Собственно для таких юзкейсов Котлин и создавался и отлично с ними работает.
Упомянутое замедление сборки может произойти конечно (из-за дополнительного анализа java кода компилятором Kotlin), но оно не критичное и на глаз его сложно заметить.


Это заставляет всех разработчиков, работающих с вами над проектом, знать оба языка.

Ну это не выглядит проблемой, без знания Java в Android разработке всяко никак, ну а обучить Java разработчика котлину на приемлемом уровне дело недели-двух

«pet project» — это не проект про домашних животных, это «детище, любимый проект». Хотя в контексте статьи ваш перевод этой фразы получился очень даже к месту))

А сможете выложить этот игрушечный проект к нам в ишью-трекер (https://kotl.in/issue)?
Мы бы поисследовали и, вероятно, исправили бы этот баг (впрочем, есть подозрение в неверной конфигурации проекта).
Это перевод статьи, поэтому, к сожалению, нет такой возможности.

Напишите автору оригинальной статьи, думаю он с радостью это сделает.
Ужас какой. Какие геттеры/сеттеры?
data class Movie(
    val id: Long,
    val title: String,
    val posterUrl: String
)

Всё! У вашего entity теперь есть и get (чтобы были set нужно val поменять на var), а также equals(), hashcode(), toString() и clone(). Метод clone() — правильный подход. Должны быть лишь геттеры. Хочешь менять — создавай клон!
Перед тем, как перетаскивать проект с Java на Kotlin стоит Kotlin изучить.
UFO just landed and posted this here
UFO just landed and posted this here
Показательный случай, почему я очень не люблю все эти генераторы счастья на аннотациях.
Sign up to leave a comment.

Articles