
Igor
15.02.2018
09:47:43

Руслан
15.02.2018
09:48:30
Да, я просто ссылочку на трансляцию не видел

Igor
15.02.2018
09:50:49
Господа, кто-нибудь пробовал kotlin-serialization?
Я не пойму, то что она возвращает пустой json для sealed class это баг или фича?
P.S. почитал https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/examples.md - там в примерах вобще нет sealed
P.P.S. для обычных классов все работает

Руслан
15.02.2018
09:51:17
Ссылка на прямую трансляцию PS JAVA MEETUP #9, на которой Андрей Бреслав выступит с темой "Kotlin: практика разработки современного языка программирования"
https://www.youtube.com/watch?v=YbRGHWcl6ZE

Google

Andrew
15.02.2018
10:07:08

Igor
15.02.2018
10:13:05
Жалко, а есть вообще какие-нибудь простые (что бы на android запустились) способы превратит sealed-class в строку и обратно?

mozomig
15.02.2018
10:26:14
Ребят пишу custom deserialize для jackson, вроде всё написал но он его не использует почему-то, вот код 3-х классов https://pastebin.com/PsP4TUbb почему может не работать?

Руслан
15.02.2018
10:29:18
JsonDeserialize вешается на setter а не класс согласно доке
т.е. как-то так нужно
class Example {
@JsonDeserialize
var a: String = ""
}

mozomig
15.02.2018
10:34:12
@JsonDeserialize(using = ActionDeserializer::class)
var action: ActionTypeEnum = ActionTypeEnum.UNKNOWN
не работает

Bogdan
15.02.2018
10:35:13
пробуй так

Руслан
15.02.2018
10:35:37
Должно и на поле работать

mozomig
15.02.2018
10:37:10

Bogdan
15.02.2018
10:39:43
если да нужно подключить либу для котлина, анотейшен процесинг
Kapt

Google

Руслан
15.02.2018
10:41:51
нет, не нужно никаких каптов
ошибка то какая

mozomig
15.02.2018
10:43:07
ошибка то какая
ошибки нет, просто юзаю spring но нужен кастом десириализатор, написал, а он все равно юзает свой какой-то

Руслан
15.02.2018
10:43:50
так возьми для начала просто main и попробуй проверить без спринга
со спрингом джексоном всегда траблы
а если возьмешь rest template то вообще ад

mozomig
15.02.2018
10:44:59
буду разбираться

Bogdan
15.02.2018
10:47:03
буду разбираться
https://github.com/FasterXML/jackson-module-kotlin ты это юзаешь?

mozomig
15.02.2018
10:47:30

Руслан
15.02.2018
10:51:26
да и без этого работает
https://pastebin.com/ZVSSrpFL

mozomig
15.02.2018
10:53:46
хм, значит спринг не хочет что-то делать

Alexey
15.02.2018
10:54:54
Используйте спринг говорили они, всё будет легко и понятно говорили они

Руслан
15.02.2018
10:55:14
Просто и быстро. И главное прозрачно

Alexey
15.02.2018
10:55:39
дааааа, прозрачно

mozomig
15.02.2018
10:55:45
Увы, жестокая жизнь

Bogdan
15.02.2018
10:55:53
да
Caveats почитай на их странице

Алексей
15.02.2018
11:00:23
Всем привет) Есть метод hashCode() в дальнейшем при добавлении новых полей в класс, для корректной работы приложения, нужно эти поля добавить и в hashCode(). Я бы мог просто добавить data class и всё, hashCode не надо постоянно обновлять. Но у меня есть одно поле которое не должно быть в hashCode, что делать?))

Руслан
15.02.2018
11:01:08
Смириться и поддерживать

Алексей
15.02.2018
11:03:57
печально

Kirill
15.02.2018
11:07:14

Google

Алексей
15.02.2018
11:08:07

Alexey
15.02.2018
11:09:57

Bogdan
15.02.2018
11:09:59

Mikhail
15.02.2018
11:10:10
Можно сделать наоборот
Дата класс и полем сделать класс обертку с поломанным хешкодом

Bogdan
15.02.2018
11:10:50

Mikhail
15.02.2018
11:10:50
И тогда он не будет влиять на хешкод класса

Alexey
15.02.2018
11:11:53
Звучит как лишнее поле

Mikhail
15.02.2018
11:12:09
Нууу, чем программист не тешился...

Алексей
15.02.2018
11:12:41
спасибо?

Bogdan
15.02.2018
11:12:54
Звучит как лишнее поле
есть вспомагательные поля, которые например не сериализуются, так же может быть и с хеш-кодом

Alexey
15.02.2018
11:13:03
А потом какой нибудь мальчик пихнёт этот объект в мапу, а на следующее утро его найдут мёртвым

Mikhail
15.02.2018
11:14:42

Alexey
15.02.2018
11:15:25
Ладно, не буду из своего болото в ваше плевать, если у вас это считается нормой

Igor
15.02.2018
11:16:24
Жалко, а есть вообще какие-нибудь простые (что бы на android запустились) способы превратит sealed-class в строку и обратно?
Удалось +- сериализовать sealed class через Jackson, только пришлось:
1) Использовать маппер с включенной “полиморфной сериализацией”
ObjectMapper()
.registerModule(KotlinModule())
.enableDefaultTyping(DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY)
2) Оборачивать sealed в другой класс, у которого тип свой-ва будет “базовым классом”
class Wrapper(val case: SealedClassName)
иначе “defaultTyping” видит что классы final и не работает
Пока единственный минус, что синглтон (object) кейсы не удается распарсить тк у них нет публичного конструктора.
P.S. подобный трюк (через обертку) в kotlin-serialization выдает ошибку IndexOutOfBoundsException

Bogdan
15.02.2018
11:17:39

Alexey
15.02.2018
11:18:16
JavaFX явно не пример хорошего дизайна

Bogdan
15.02.2018
11:18:26

Vitalii
15.02.2018
11:18:57

Google

Bogdan
15.02.2018
11:19:04

Kirill
15.02.2018
12:04:40

Алексей
15.02.2018
12:05:52

Kirill
15.02.2018
12:06:17
Ну либо так, либо поддерживать hashCode

Vitalii
15.02.2018
12:06:40
Ну так просто перегрузи hashCode() тогда и свой напиши.

Kirill
15.02.2018
12:06:43
Впрочем можно ещё какой-нибудь постпроцессор написать
и извращаться над байткодом и вот это вот всё

Алексей
15.02.2018
12:07:26

Kirill
15.02.2018
12:07:41
ты уверен что оно тебе надо?)

Алексей
15.02.2018
12:08:08
Нет, но сам факт что это можно, интересно))

Sergey
15.02.2018
12:10:09
Сорян )

Kirill
15.02.2018
12:10:24
ByteBuddy().redefine<Any>(clazz, classLocator)
ну и читать про ByteBuddy
но эт прям дичь
и лютый оверкил для таких целей

Quantum Harmonizer
15.02.2018
12:12:48

Vadim
15.02.2018
12:24:14
Во viewmodel у меня есть val userName: ObservableField<String> = ObservableField("name")
Чтобы забиндить во вьюху, мне обязательно нужно обоваричать это в метод чтобы вынуть String?
fun getUserName(): String {
return userName.get()
}
и потом вызывать: android:text="@{viewmodel.getUserName()}" ?
или я могу как-то напрямую в android:text прописать ObservableField ?

Quantum Harmonizer
15.02.2018
12:40:08

Google

Sergey
15.02.2018
12:47:59
метод с .get не нужен
оно понимает что это observable field