Size: a a a

Kotlin Community

2020 December 23

I

Igor in Kotlin Community
Vladimir Petrakovich
Так а что надо сделать-то? Чтобы не падало? Ну так надо написать этот метод таким, чтобы он был готов к вызову до конструктора.
А как его написать, если нужно в нем обратиться к primary-constructor полю?

Понятно дело, что надо нахрен переписывать базовый класс, что бы он такой хренью не занимался.
источник

VP

Vladimir Petrakovich in Kotlin Community
Igor
А как его написать, если нужно в нем обратиться к primary-constructor полю?

Понятно дело, что надо нахрен переписывать базовый класс, что бы он такой хренью не занимался.
То есть метод обязан вернуть что-то вычисленное из аргументов конструктора?
Ну тут, наверное, ничего не сделать, потому что к this доступа до вызова конструктора нет.
источник

AL

Anton Lakotka in Kotlin Community
Igor
А как его написать, если нужно в нем обратиться к primary-constructor полю?

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

VP

Vladimir Petrakovich in Kotlin Community
Igor
А как его написать, если нужно в нем обратиться к primary-constructor полю?

Понятно дело, что надо нахрен переписывать базовый класс, что бы он такой хренью не занимался.
А откуда класс такой?
источник

AL

Anton Lakotka in Kotlin Community
Anton Lakotka
Я как-то решал подобную проблему, попробую вспомнить
Вспомнил, я сначала подставлял что-то вроде NullObject а потом менял его уже после инициализации.
но я хз можно ли так в твоем случае.
а так простого решения наверное нет. т.к. базовый конструктор всегда вызывается первым.
источник

I

Igor in Kotlin Community
Vladimir Petrakovich
А откуда класс такой?
Да неудачно спроектированный "Фреймворк".
Уже неважно, я там захачил через обращение к protected полю базового класса (в нем примерно та же информацию лежала что и нужная мне).
источник

VP

Vladimir Petrakovich in Kotlin Community
Igor
Да вот низя, надо именно создать класс от базового класса и как-то достучатся до поля
Есть идея страшного костыля: фабричный метод + thread local. Кладёшь туда значение, а в том методе вытаскиваешь.
источник

A

Aleksandr in Kotlin Community
А кто помнит, зачем вообще рекомендуется переопределять equals&hashcode для массива байтов (ByteArray тип)?
источник

AN

Alexander Nozik in Kotlin Community
Aleksandr
А кто помнит, зачем вообще рекомендуется переопределять equals&hashcode для массива байтов (ByteArray тип)?
для массива байтов не надо, а вот для дата классов полезно, потому что массивы не совсем консистентно сравниваются
источник

A

Aleksandr in Kotlin Community
Alexander Nozik
для массива байтов не надо, а вот для дата классов полезно, потому что массивы не совсем консистентно сравниваются
Да, каюсь, я забыл упомянуть что массив байтов - это имелось в виду что поле такое. Как раз внутри дата класса
источник

A

Aleksandr in Kotlin Community
А что значит не совсем консистентно сравниваются?
источник

AL

Alexander Levin in Kotlin Community
Aleksandr
Да, каюсь, я забыл упомянуть что массив байтов - это имелось в виду что поле такое. Как раз внутри дата класса
Все массивы имеют стандартный equals/hashcode из Object/Any, что обычно не то поведение, которое вы могли бы хотеть. Решения проблемы:
1. Не использовать массивы если это представляется разумным (например юзать листы)
2. Перегружать equals/hashcode, если в ваших классах есть массивы (там есть всякие contentHashcode, contentEquals и тд)
источник

AN

Alexander Nozik in Kotlin Community
Aleksandr
А что значит не совсем консистентно сравниваются?
Они сравниваются по ссылке, а не структурно. Для структурного сравнения надо использовать contentEquals
источник
2020 December 24

A

Aleksandr in Kotlin Community
Тогда позвольте задать ещё вопрос. Смотрите, у меня есть файл, я читаю и записываю в него. Для более эффективной обработки мне хочется разделить это на два потока.

Но чтобы всё работало асинхронно, я могу использовать корутины - https://stackoverflow.com/questions/50468743/kotlin-how-to-read-from-file-asynchronously

Например, иметь два прерываемых метода на чтение и запись. Но тут я сталкиваюсь с проблемой консистентности данных. Хочется, чтобы у меня эта критическая секция была под защитой. Какие решения посоветуете?

Дока подсказывает это https://kotlinlang.org/docs/reference/coroutines/shared-mutable-state-and-concurrency.html#thread-confinement-coarse-grained
источник

A

Aleksandr in Kotlin Community
Либо не париться и использовать внутри прерывающих функций на чтение и запись какой-нибудь ReadWriteLock?
источник

KS

Kirill Sinyuk in Kotlin Community
всем привет.
может кто пояснить, зачем имплементить serializable? имею в виду практический смысл. в теории я знаю что это и зачем нужно. но тут залез в проект и где-то классы имплементят, а где-то нет.(на уровне слоёв, где это в общем-то нужно). и, тем не менее, всё работает. отсюда и вопрос
источник

PE

Pavel Erokhin in Kotlin Community
чтобы сериализовать объект, его "содержимое" в строку
источник

AN

Alexander Nozik in Kotlin Community
Kirill Sinyuk
всем привет.
может кто пояснить, зачем имплементить serializable? имею в виду практический смысл. в теории я знаю что это и зачем нужно. но тут залез в проект и где-то классы имплементят, а где-то нет.(на уровне слоёв, где это в общем-то нужно). и, тем не менее, всё работает. отсюда и вопрос
В смысле Java Serializable? Чтобы использовать встроенную java сериализацию. Ее в котлин обычно не используют.
источник

KS

Kirill Sinyuk in Kotlin Community
Alexander Nozik
В смысле Java Serializable? Чтобы использовать встроенную java сериализацию. Ее в котлин обычно не используют.
да. java.io.Serializable
источник

KS

Kirill Sinyuk in Kotlin Community
Alexander Nozik
В смысле Java Serializable? Чтобы использовать встроенную java сериализацию. Ее в котлин обычно не используют.
вот я и сижу и не врубаюсь, почему где-то оно в коде есть, где-то нет и при этом всё работает. А если всё работает и так, то зачем оно нужно?
источник