Потому что нарушается контракт equals и hashcode
Предположу, потому что методы, которые генерируются в дата классе (equals, hashcode, copy), при наследовании сломают LSP и вообще непонятно как их генерировать у наследника. Если у вас добавляется пропертя в наследнике, то весь смысл дата класса теряется
Да не, для насоедрвания можно их также переопределять. Но наследования датаклассов не очень красивое из-за конструктора
Гарантия пропадает. И в любом случае наследник не будет выполнять контракт предка
Какой контракт ? Гарантия не пропадает так как для нового класса нужно генерить eq и хеш заново, вопрос только в приватных полях - по ним eq не перегенерируешь. В целом наследования дата классов не так просто сделать, да и вопрос нужно ли. Про контракт а то дата класс может наследоватся от другого (с иквелс и хешем) контракт не сломает, на eq и хеш код ?
B: A a: A b: B a == b b != a // из-за дополнительного поля
Так там должна быть проверка на класс. Они оба будут false. Вы давно иквелс ручками не писали
Согласен, но для data class там все-таки дата еквалити подразумевается.
Согласен, я и не говорю что это нужно вводить. Я говорю что можно, но профита не вижу, мне пару раз подобное нужно было и то можно было по другому
Про проблемы я молчу - там граблей будет больше чем сейчас:
Обсуждают сегодня