Когда я создаю неизменяемые объекты, классы классов невероятно удобны из-за автоматически сгенерированного метода copy
.
Но классы case имеют свои проблемы: они не должны унаследоваться, и они дают вам экстрактор, даже если вы этого не хотите.
Поэтому иногда мне приходится использовать класс сада Scala. Проблема в том, что тогда я должен написать свой собственный неизменяемый API, который может быть довольно повторяющимся:
class Debt(principalBalance: Double, name: String, endDate: LocalDate) {
def withNewPrincipalBalance(bal: Double) = new Debt(bal, name, endDate)
}
Есть ли более масштабируемый способ сделать это? Могу ли я использовать плагин компилятора?