Size: a a a

Kotlin Community

2020 October 18

с#

саша сок #KotlinGang... in Kotlin Community
Igor
> что очень нежелательно и имхо некрасиво

Наверное это для кейсов, когда у тебя kotlin и на сервере и на фронте

А для остальных, всегда же можно руками парсер написать 🤔
у меня в data может быть что угодно. и делать парсер, который придётся менять с каждой новой серверной ошибкой - такое.
там если код == 14, то data - Long, если 16, то String, если 17, то какой-то свой класс.
мб и можно, но мне нравится как работу с примитивами в JsonElement обернули
источник

с#

саша сок #KotlinGang... in Kotlin Community
саша сок #KotlinGang
ну я узнал это тестами. иначе оно:
1) в случае с polymorphic выдаёт ошибку, что не может найти субкласс по дескриптору (потому что его нет)
2) в случае с contextual просто пишет, что не может найти для Any сериализер
хотя я проверял contextual и если там не примитив, то всё отлично
источник

AM

Andrew Mikhaylov in Kotlin Community
саша сок #KotlinGang
у меня в data может быть что угодно. и делать парсер, который придётся менять с каждой новой серверной ошибкой - такое.
там если код == 14, то data - Long, если 16, то String, если 17, то какой-то свой класс.
мб и можно, но мне нравится как работу с примитивами в JsonElement обернули
Ну да, соре, сериализация не умеет такое за тебя угадывать, придётся кастомный сериалайзер писать)
источник

AL

Anton Lakotka in Kotlin Community
саша сок #KotlinGang
ну я узнал это тестами. иначе оно:
1) в случае с polymorphic выдаёт ошибку, что не может найти субкласс по дескриптору (потому что его нет)
2) в случае с contextual просто пишет, что не может найти для Any сериализер
я больше про некрасиво.

это просто способ дискриминации. если ты пишешь rpc over http какое-нибудь, и нужно чтобы оно выглядело красиво, то тогда нужно кастомизировать кодер/декодер руками. чтобы вместо Type передавать красивые имена или использовать другую стратегию дискриминацим.
источник

AM

Andrew Mikhaylov in Kotlin Community
Либо как ты сделал, но ты по сути просто переложил кусок работы по десериализации на потом
источник

AM

Andrew Mikhaylov in Kotlin Community
Утащив это предположительно в бизнес-логику)
источник

с#

саша сок #KotlinGang... in Kotlin Community
Anton Lakotka
я больше про некрасиво.

это просто способ дискриминации. если ты пишешь rpc over http какое-нибудь, и нужно чтобы оно выглядело красиво, то тогда нужно кастомизировать кодер/декодер руками. чтобы вместо Type передавать красивые имена или использовать другую стратегию дискриминацим.
а, ну просто это апи будут не только котлин разработчики использовать и это больше нигде не надо
источник

с#

саша сок #KotlinGang... in Kotlin Community
Andrew Mikhaylov
Либо как ты сделал, но ты по сути просто переложил кусок работы по десериализации на потом
я знаю и меня устраивает это)
источник

AM

Andrew Mikhaylov in Kotlin Community
саша сок #KotlinGang
я знаю и меня устраивает это)
Ну дело твоё)
источник

с#

саша сок #KotlinGang... in Kotlin Community
Andrew Mikhaylov
Утащив это предположительно в бизнес-логику)
ну там особо нет разницы пока что

val timeout = error.data as Long
или
val timeout = error.data.primitiveElement.long
источник

AM

Andrew Mikhaylov in Kotlin Community
Я б чёт возразил, но у меня в коммерции дичь ещё большая, к сожалению.
источник

с#

саша сок #KotlinGang... in Kotlin Community
если появятся кастомные модельки, то уже буду думать что-то
источник

с#

саша сок #KotlinGang... in Kotlin Community
Andrew Mikhaylov
Я б чёт возразил, но у меня в коммерции дичь ещё большая, к сожалению.
там на сервере вообще не предполагали, что возможно у ошибок будут какие-то параметры, поэтому это самое быстрое, что я придумал. пока что только для примитивов надо и с этим JsonElement нормально справляется
источник

с#

саша сок #KotlinGang... in Kotlin Community
если сделать там JsonPrimitive, то будет

val timeout = error.data.long, вполне даже
источник

KD

Konstantin Dovnar in Kotlin Community
Quantum Harmonizer
Что нуллабельность не видна из названия
Для этого там явный тип стоит.

Вообще, довольно забавная ситуация здесь у котлина.
«Мы откажемся от Checked Exceptions и добавим "негласное" правило для stdlib'ы, чтобы вы могли их чекать»
источник

KD

Konstantin Dovnar in Kotlin Community
Как-то, кстати, никогда не вникал, а как у Котлина на уровне байткода идёт компиляция без Checked Exceptions?
JVM не должен забраковать?
источник

I

Igor in Kotlin Community
Konstantin Dovnar
Как-то, кстати, никогда не вникал, а как у Котлина на уровне байткода идёт компиляция без Checked Exceptions?
JVM не должен забраковать?
Лол на уровне байт-кода нет никаких "Checked Exceptions"
Это придумка Java
источник

KD

Konstantin Dovnar in Kotlin Community
Igor
Лол на уровне байт-кода нет никаких "Checked Exceptions"
Это придумка Java
Понял, спасибо
источник

I

Igor in Kotlin Community
Да и вообще я не знаю ни одного jvm языка с CE (в groovy/scala/clojure их точно нет)
источник

AL

Anton Lakotka in Kotlin Community
А напомните, есть ли вообще современные языки с CE? на уме крутится только java
источник