Size: a a a

Kotlin Community

2020 June 23

AM

Andrew Mikhaylov in Kotlin Community
Йоу, чатик, как вы решаете проблему с типом, для которого может быть несколько критериев равенства для разных мест в коде? Или это безусловный признак того, что тип надо пилить на несколько, и каждому свой equals определять?
источник

AM

Andrew Mikhaylov in Kotlin Community
Хорошая шутка была :)
(Тип из команды давно уже вывелся сам, но проект огромный, и жить с ним как-то надо)
источник

AL

Anton Lakotka in Kotlin Community
with(context) { a == b } не уверен, можно ли переопределить equals таким путем.
источник

AM

Andrew Mikhaylov in Kotlin Community
Anton Lakotka
with(context) { a == b } не уверен, можно ли переопределить equals таким путем.
https://pl.kotl.in/Itk9to-Yj
Хорошая попытка, но увы :)
источник

AL

Anton Lakotka in Kotlin Community
https://pl.kotl.in/F83P8Fcs0
но такое работает 🙂
источник

AL

Anton Lakotka in Kotlin Community
можно и дальше упороться https://pl.kotl.in/FBK7dP470
источник

AM

Andrew Mikhaylov in Kotlin Community
Anton Lakotka
https://pl.kotl.in/F83P8Fcs0
но такое работает 🙂
Нукак работает. Собирается — да. Но вызывается всё равно equals самого класса, а не экстеншн из контекста.
источник

AM

Andrew Mikhaylov in Kotlin Community
В примере у класса equals тривиальный, в контексте equals сравнивает поле по модулю. В ответе false, значит сравнилось по значению, а не по модулю.
источник

AL

Anton Lakotka in Kotlin Community
Andrew Mikhaylov
Нукак работает. Собирается — да. Но вызывается всё равно equals самого класса, а не экстеншн из контекста.
нет же. там возвращается true из контекста, хотя должно было быть false.
источник

AM

Andrew Mikhaylov in Kotlin Community
Значит у меня в очередной раз не открылась правильно ссылка с сайта :(
источник

AL

Anton Lakotka in Kotlin Community
https://pl.kotl.in/6m_xvrEiZ для большей убедительности
источник

AL

Anton Lakotka in Kotlin Community
но это не то что нужно, я так понимаю.
источник

AM

Andrew Mikhaylov in Kotlin Community
Всё, сдаюсь, я больше не буду пользоваться play.kotl.in. Надоело.
источник

DS

Dmitry Sapronov in Kotlin Community
Andrew Mikhaylov
Йоу, чатик, как вы решаете проблему с типом, для которого может быть несколько критериев равенства для разных мест в коде? Или это безусловный признак того, что тип надо пилить на несколько, и каждому свой equals определять?
Если вопрос бизнес логики то тут эквивалентность объектов = эквивалентности бизнес id. Если же это что то утилитное, то лучше сделать так что бы объекты возвращали свой стейт в виде иммутабельного дата объекта, компаратор определял чем именно эти два стейта отличаются и вызывал конкретную логику для конкретного набора изменений
источник

DS

Dmitry Sapronov in Kotlin Community
Но в целом это странный кейс. Что то тут попахивает
источник

AM

Andrew Mikhaylov in Kotlin Community
Dmitry Sapronov
Но в целом это странный кейс. Что то тут попахивает
Да я с этим не спорю совершенно. Как писал выше, имеем, что имеем.
Кейс как раз про айдишники, просто беда в том, что моделька не распилена на несколько, как обычно делают, придерживаясь DDD, и в итоге у неё нет, скажем, вот такого айдишника, от которого можно сплясать. То есть по ходу жизни объекта у него может быть несколько полей, работающих как айдишник, в каждое заданное время.

Решил пока сэкономить время на разрез и в некоторых местах, где нужно кастомное сравнение, вместо Set<MyModel> взять Map<MyId, MyModel>, где MyId -- дата-класс, куда сложена часть полей. Потом обязательно перепишем, конечно же...
источник

AN

Alexander Nozik in Kotlin Community
Andrew Mikhaylov
Йоу, чатик, как вы решаете проблему с типом, для которого может быть несколько критериев равенства для разных мест в коде? Или это безусловный признак того, что тип надо пилить на несколько, и каждому свой equals определять?
ну fun MyType.requalsOtherType. По-другому никак. Тут даже экстеншены не помогут
источник

BP

Bogdan Panchenko in Kotlin Community
Andrew Mikhaylov
Йоу, чатик, как вы решаете проблему с типом, для которого может быть несколько критериев равенства для разных мест в коде? Или это безусловный признак того, что тип надо пилить на несколько, и каждому свой equals определять?
Я пилит некие утилитные класс-функции которые фильтровали и сравнивали классы по свойствам которые ты вручную задаещь
источник

BP

Bogdan Panchenko in Kotlin Community
*по пропертям
источник

VP

Vladimir Petrakovich in Kotlin Community
Andrew Mikhaylov
Всё, сдаюсь, я больше не буду пользоваться play.kotl.in. Надоело.
Согласен, как же он гонит иногда
источник