Re[10]: Догонит ли net java?
От: · Великобритания  
Дата: 05.12.22 17:39
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>
vsb>var person1 = Person with {
vsb>    lastName = l;
vsb>    firstName = f;
vsb>    age = 18;
vsb>};

vsb>var person2 = person1 with {
vsb>    age = 16;
vsb>};
vsb>

По-моему фигня какая-то, первое — просто сахарок, который IDEA уже и так подсказывает в виде parameter hints. Второе — как в scala case-class, очень неудобно, когда модификация поля порождает новый объект — жуть.
Для dto в 40 полей такое всё равно не годится. Нужен билдер, чтобы по частям можно было собирать.

Хочется такого:
public Person modify(Person p) {
  var builder = p.builder();
  updateAAA(builder);
  ...
  if(...) updateBBB(builder);
  else updateCCC(builder);
  ...
  updateDDD(builder);
  return builder.build();
}


vsb>В целом это сделает их юзабельными. Конечно без мутабельности будет неудобно и придётся менять фреймворки, но тут разработчики уже упёрлись рогом.

В принципе хорошо иметь иммутабельность, но это требует парный мутабельый билдер и всё становится сложно с т.з. дизайна ЯП.

vsb>·>Не скажу за весь lombok, но по-моему геттеры-сеттеры можно генерить используя вполне себе стандартный annotation processor.

vsb>Я сам не пробовал annotation processor-ы писать, поэтому могу ошибаться. Но в моём понимании annotation processor может генерировать либо полностью новый класс, который старый код видеть не будет. Либо какие-то там проверки делать и тд. То бишь максимум, который можно сделать оставаясь в рамках того, что разрешено — руками объявить interface Person { String name(); String name(String name); }, а annotation processor сгенерирует class PersonImpl implements Person { ... } и ты его экземпляр уже как-то получишь.
Ты прав. Можно только новый тип создавать оказывается.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.