stask
10/13/2020, 5:49 PMaleksey.tomin
10/23/2020, 2:11 PMaleksey.tomin
11/20/2020, 6:05 AMaleksey.tomin
12/03/2020, 2:01 PMaleksey.tomin
12/10/2020, 9:23 AM@Serializable
и data class
в целом никакой нет. Но первое это библиотека + плагин, второе- часть языка.
2. После подключения @Serializable
очень сложно понять, что за код там получился- надо отрезать исходники и смотреть декомпилированный файл (или можно проще? Скажите, интересно).
3. Глядя в реализацию плагина я вижу 3 части - jvm/js/native хотя в целом там должно быть всё одинаково.
4. Плагин надо брать версии kotlin а саму библиотеку- другой версии. И можно (в теории, мне не попадалось) выбрать несовместимые варианты.
Мне давно уж казалось, что в подходе “аннотация+плагин” есть принципиальный изъян. И язык forth не давал покоя 🙂
Наконец в голове сложился пазл “как должно быть“:
1. Аннотация типа @Serializable
должна быть специального типа - не public annotation class Serializable
а public plugin class Serializable
(имя неважно) и располагаться в compile-only-time библиотеке.
2. Класс аннотации должен выполнять работу над кодом, но не IR и т.п. а над PSI или FIR - см. новый frontend compiler, например https://youtu.be/S2--aYB2GiE?t=1442▾
voddan
02/01/2021, 10:02 PMEugen Martynov
02/12/2021, 10:47 AM1 + listOf(2,3) = [1,2,3]
в стандартной библиотеке?Eugen Martynov
02/20/2021, 9:17 AMfun Set.toggle(element) = if (contains(element)) this - element else this + element
?Eugen Martynov
03/02/2021, 9:42 AMcaffeine
03/13/2021, 3:32 PMEugen Martynov
03/24/2021, 11:00 AMM S
05/07/2021, 2:43 PMEugen Martynov
05/18/2021, 12:29 PMcom.android.tools.r8.errors.b: Class content provided for type descriptor commander.screens.booking_flow.creating.CreateAppointment$Effects$LoadAvailableDaysAndTimeSlots$1 actually defines class commander.screens.booking_flow.creating.CreateAppointment$Effects$loadAvailableDaysAndTimeSlots$1
zaleslaw
05/25/2021, 10:45 AMcaffeine
07/12/2021, 11:19 PMinterface I1
class C1:I1
class C2
Нужно реализовать функцию, которая принимает два класса (KClass<out Any>
). Функция должна вернуть является ли один класс предком другого класса.
На данном примере результат будет такой
isChild(I1::class,C1:class) = true
isChild(I1::class, C2::class) = false
Сделать это нужно в рамках kotlin/common.
Лучшее что нашел - это KClass.isInstance(...)
, но экземпляров классов у меня на руках нет :(
Подскажите пожалуйстаEugen Martynov
08/17/2021, 8:24 AMruwinmike
08/24/2021, 4:22 PMprivate fun test() {
val string = """{ "type": "a", "value": "Hello"}"""
val result = Json.decodeFromString(Test.serializer(), string)
println(">>> result $result")
}
@Serializable
sealed class Test {
abstract val type: String
@SerialName("a")
@Serializable
data class A(
override val type: String,
val value: String
) : Test()
}
но можно переопределить type на другое значение? Пытаюсь вот так вот
private fun test() {
val string = """{ "fieldType": "a", "value": "Hello"}"""
val result = Json.decodeFromString(Test.serializer(), string)
println(">>> result $result")
}
@Serializable
sealed class Test {
@SerialName("fieldType")
abstract val type: String
@SerialName("a")
@Serializable
data class A(
override val type: String,
val value: String
) : Test()
}
Но получаю ошибку Polymorphic serializer was not found for missing class discriminator ('null')
Alex
08/26/2021, 2:29 PMvalue
классы работают в Exposed?umar
08/31/2021, 6:21 PMcaffeine
09/24/2021, 9:00 PMEugen Martynov
11/05/2021, 3:48 PMcaffeine
12/04/2021, 2:50 PMVlad Zotov
12/09/2021, 3:18 PMEugen Martynov
12/23/2021, 4:02 PMjava.lang.AbstractMethodError
Eugen Martynov
01/12/2022, 5:23 PMinsurance_type
@kotlinx.serialization.Serializable
@SerialName("insurance_type")
sealed class InsuranceInfo : Serializable {
@kotlinx.serialization.Serializable
@SerialName("public")
data class Public(
@SerialName("company_name") val companyName: String? = null,
@SerialName("company_id") val companyId: String,
@SerialName("insurance_number") val insuranceNumber: String,
@SerialName("insurance_end_date") @Contextual val insuranceEndDate: LocalDate,
@SerialName("insurance_status") val insuranceStatus: InsuranceStatus
) : InsuranceInfo(), Serializable
@kotlinx.serialization.Serializable
@SerialName("private")
object Private : InsuranceInfo(), Serializable
@kotlinx.serialization.Serializable
@SerialName("self-paid")
object SelfPaid : InsuranceInfo(), Serializable
}
Никак не нащупаю решения и не могу найти решения в лоб открыть объект, записать елемент дескриминатора, записать все поля силд класса, закрыть объект
caffeine
03/18/2022, 1:08 PMexpect value class .... {
var value: Boolean
}
В actual
я использую get
и set
для этого поля, однако это не мешает компилятору ругаться на этот expect
класс:
Inline property cannot have backing field
и
Inline class cannot have properties with backing fields
Как это исправить?aleksey.tomin
04/05/2022, 3:49 AMDmitry
08/06/2022, 11:58 AMqwert_ukg
12/09/2022, 9:47 AMqwert_ukg
12/09/2022, 9:47 AMqwert_ukg
12/09/2022, 9:47 AMaltavir
12/24/2022, 2:50 PM