169 похожих чатов

Почему нельзя наследоватся от data class?

10 ответов

34 просмотра

Потому что нарушается контракт equals и hashcode

Предположу, потому что методы, которые генерируются в дата классе (equals, hashcode, copy), при наследовании сломают LSP и вообще непонятно как их генерировать у наследника. Если у вас добавляется пропертя в наследнике, то весь смысл дата класса теряется

Alexander Nozik
Потому что нарушается контракт equals и hashcode

Да не, для насоедрвания можно их также переопределять. Но наследования датаклассов не очень красивое из-за конструктора

Bohdan Panchenko
Да не, для насоедрвания можно их также переопредел...

Гарантия пропадает. И в любом случае наследник не будет выполнять контракт предка

Alexander Nozik
Гарантия пропадает. И в любом случае наследник не ...

Какой контракт ? Гарантия не пропадает так как для нового класса нужно генерить eq и хеш заново, вопрос только в приватных полях - по ним eq не перегенерируешь. В целом наследования дата классов не так просто сделать, да и вопрос нужно ли. Про контракт а то дата класс может наследоватся от другого (с иквелс и хешем) контракт не сломает, на eq и хеш код ?

Bohdan Panchenko
Какой контракт ? Гарантия не пропадает так как для...

B: A a: A b: B a == b b != a // из-за дополнительного поля

Alexander Nozik
B: A a: A b: B a == b b != a // из-за дополнительн...

Так там должна быть проверка на класс. Они оба будут false. Вы давно иквелс ручками не писали

Bohdan Panchenko
Так там должна быть проверка на класс. Они оба буд...

Согласен, но для data class там все-таки дата еквалити подразумевается.

Alexander Nozik
Согласен, но для data class там все-таки дата еква...

Согласен, я и не говорю что это нужно вводить. Я говорю что можно, но профита не вижу, мне пару раз подобное нужно было и то можно было по другому

Bohdan Panchenko
Согласен, я и не говорю что это нужно вводить. Я г...

Про проблемы я молчу - там граблей будет больше чем сейчас:

Похожие вопросы

Обсуждают сегодня

Есть какой-нибудь для Delphi/FPC T*Compression(Decompression)Stream на базе LZ4/Zstd/любой другой быстрый(и хорошо сжимающий) алгоритм А ещё лучше в pure pascal А ещё лучше од...
notme
48
Такой вопросец - есть функция function MySuperDuperConcat(const a: array of AnsiString): AnsiString; Как мне в её теле сделать вот так? Result:=Concat(a); А не грустный вариан...
notme
15
type TObj = object procedure Init; virtual; end; TObj1 = object(TObj) procedure Init; override; end; procedure TObj1.Init; begin inherited; end; procedur...
Alexander 👋
29
А чем вам питонисты не угодили?😂
.
79
Всем привет. Поделитесь, пожалуйста, опытом. Есть форма, на которой имеется dbgrid и кнопки: добавить, редактировать, удалить. Если нет записей в dbgrid, то кнопки редактирова...
Евгений
4
Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
86
Вот смотрите у меня есть два стрима сейчас fs, cs: TStream; fs := TFileStream.Create('filename'); cs := TCompressionStream.Create(compression_level, fs); Я хочу сделать так: ...
notme
5
type TExtensions<GExtender>=class function GetExtension<GEntityExtenderType>:GEntityExtenderType; end; function TExtensions<GExtender>.GetExtension<GEntityExtenderType...
zamtmn
8
Всем здравствуйте! Я хотел узнать сколько стоит средняя месячная зарплата у Electron js разработчиков? Мне очень это важно и нужно, плиз помогите узнать эту инфу! Для Джунио...
U.K.
10
Можно ли загрузить скрипт py в бота чтобы он работал по нему? как это сделать?
huskadam #RCC Фанат? @hitlerpvp
13
Карта сайта