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

Добрый день! Допустим, я хочу сериализовать много видов сущностей из джавовской

библиотеки третьей стороны. Переписывать как-то не хочется, и писать кастомные сериализаторы для всего этого дела (что котлиновские, что mixin в jackson) тоже не хочется.

Какое может быть наиболее приличное решение такой проблемы? Рефлексию не хочется, т.к. не type-safe. Писать свой плагин? 🙂

11 ответов

8 просмотров

Я не понял в чем проблема с рефлексией. Но если речь о third-party library, других вариантов нет. Котлиновская сериализация работает на этапе компилляции

можно поиграться с кодогенераацией. т.е. просканировать все сущности, которые тебя интересуют и по ним нагенерировать классы-сериализаторы. И тогда станет type-safe.

Georgy-Ginz Автор вопроса
Anton Lakotka
можно поиграться с кодогенераацией. т.е. просканир...

А можно какой-нибудь гайдик/туториал/пример проекта, в котором такое делают? Звучит круто и хочется потрогать, просто я зеленый и вообще не представляю, как такое выглядит и как подступиться

Georgy Ginz
А можно какой-нибудь гайдик/туториал/пример проект...

мне сложно что-либо советовать. Но в качестве Inspiration и прокачки мозгов, могу посоветовать почитать kotlinx.serialization. Но там несколько все сложнее, и вкуривать придется долго и упорно. Если есть желание, то пожалуйста. И можешь спрашивать вопросы, что и зачем. Но это только в качестве само-образования. Если хочется что-то ближе к джаве, то можно покопать например https://github.com/x-stream/xstream/tree/master/xstream/src/java/com/thoughtworks/xstream/mapper А для генерации кода, можно воспользоваться https://square.github.io/kotlinpoet/ Но предупреждаю это не дело пары часов/дней/недель. Скорее всего у тебя займет несколько месяцев.

Georgy-Ginz Автор вопроса
Anton Lakotka
мне сложно что-либо советовать. Но в качестве Insp...

Теперь я еще лучше знаю, что ничего не знаю 🙂 Спасибо! Отложу в долгий ящик Свою задачу, видимо, действительно поковыряю рефлексией

На самом деле заглядывать в kx.serialization необязательно. Загрузить нужные классы в класслоадер, перечислить их там, дальше стандартными средствами рефлексии перечислить поля и котлинпоэтом сгенерировать код должно быть заметно проще. Разве что встраивать это в пайплайн сборки может оказаться больно.

Georgy-Ginz Автор вопроса
Andrew Mikhaylov
На самом деле заглядывать в kx.serialization необя...

Ну мне не для прода. Я так, игрушечный проект тыкаю. Поэтому и допускаю использование всякой дичи

Georgy Ginz
Хм, спасибо, потыкаю

https://github.com/inkremental/inkremental/blob/master/meta/introspect-android/src/main/kotlin/AndroidIntrospector.kt Можно попробовать вот тут повдохновляться. Этот кусок отвечает за то, чтобы найти наследников android.view.View, сгрести проперти и дальше по ним кодген сделать. Снаружи в этот класс подсовывается готовый джарник, сам этот класс разбирает джавовые классы в свою модель, а потом вот тут https://github.com/inkremental/inkremental/blob/master/meta/gradle-plugin/src/main/kotlin/GenerateDslTask.kt по модели генерируется код.

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

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

Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
55
Я тут за тем, чтобы задать вопрос, так как не знаю ассемблер, учу с/с++. Короче, насколько дорога операция перехода в функцию при ее вызове? Дело в том, что в с++ есть макросы...
Максим Рябцев
12
А какие чаты вообще в ходу? Auto aim? И что еше
do you think you're better off alone? А
13
Привет, нужен совет старших товарищей. Есть глобальная переменная var DefaultDataFolder:string; инициализируем DefaultDataFolder:='a:\_OUT\'; есть примитивная процедур...
Max Otto
14
hello friends. Do you know how can I learn getx? I have a software project that I should deliver it up to 5 weeks later and I need to learn firebase too. I will be thankfull
AmirHossein Razavi
15
Доброе время суток! у меня тут иноды закончились. и понял почему по сути кстит, я периодически очищаю постгрес и сентри контайнер: postgres=# DELETE FROM nodestore_node WHER...
Юсиф Насиров
9
Вопрос. Теоретический. Есть список команд. Команды отправляю в обработку некой функции, по очереди. Разные команды могут давать разные результаты после обработки. В зависимос...
Serjone
7
lazarus-3.2.0/gtk, linux патч "имя проекта по умолчанию project1 -> prj" день добрый не нравится "именя проекта по умолчанию" (project1), к.раз приходится переименовывать (н...
livontiy
5
Коллеги, а в чём сейчас хорошо писать на перле, в смысле ide? Пробовал в идее с плагином, подсветка есть, даже какие-то предупреждения есть, но рефакторинга считай нет. Перене...
Дмитрий Петров
9
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Карта сайта