@kotlin_lang

Страница 927 из 982
Alexander
07.10.2018
12:05:33
Можно в топ левеле private писать, не?
Можно, но оно будет видно только в этом файле

Konstantine
07.10.2018
12:05:44
Нормально, загружать-то код долго
Он не всегда нужен так.

Руслан
07.10.2018
12:06:21
А кто-то реально использует object из-за того что он синглтон?

Я вот грепнул, и у меня только кейс с анонимным объектом используется

Google
Руслан
07.10.2018
12:07:49
Ну и понятно, что в sealed может быть удобно

dimiii
07.10.2018
12:08:00
для джавововской сериализации есть механизм readResolve, чтобы подменять прочитанные значения. для jackson наверняка тоже подобное есть, надо покопаться
Спасибо. Но не думаю, что займусь этим. Друг поделился реализацией тестового задания на scala и я решил ради фана посмотреть, каков будет аналог (аналоговнет). Уже реализация полиморфной де/сериализации на jackson породила такую тошнотворную портянку (по сравнению с akka-http). К ней добавилось это откровение с Object и equals. Еще компилятор выплевывает портянку, начинающуюся `Error:Kotlin: [Internal Error] java.lang.IllegalStateException: Backend Internal error: Exception during code generation Cause: Back-end (JVM) Internal error: Couldn't inline method call 'consumeEach' into` при чистом окне в идее. Думаю для меня достаточно.

А кто-то реально использует object из-за того что он синглтон?
Я использовал лишь потому, что кто-то решил, что дата классов без полей быть не может

Quantum Harmonizer
07.10.2018
12:09:36
Руслан
07.10.2018
12:11:02
Да просто нужно сюда выкинуть тестовое (саму задачу) и мы посмотрим как на котлине идеоматично сделать

Beholder
07.10.2018
12:12:12
Я использовал лишь потому, что кто-то решил, что дата классов без полей быть не может
дата класс без полей действительно не имеет смысла. можно тогда просто писать class MyData

Beholder
07.10.2018
12:14:16
все полезности дата класса - то, что автоматически определяется equals, hashcode, и componentN. а если полей нет - то чего там писать?

Руслан
07.10.2018
12:14:27
дата класс без полей действительно не имеет смысла. можно тогда просто писать class MyData
Видимо хотелось из-за hashCode/equals, чтобы там красиво true/1 возвращалось

Мне кажется, я чувствую идиоматику.
Ну нам же тоже интересно

Google
Bogdan
07.10.2018
12:16:29
И в таком случае получается, что он (object) заинитится сразу и будет жить всегда пока живо приложение?
нет, ClassLoader грузит класс только тогда, когда его попросят, аналогия с JDBC драйверами Class.forname("package.NameClass"), скажет ClassLoader (текущему) он просканирует classpath на наявность данного класса

Он не всегда нужен так.
значит вам не нужен синглетон

Konstantine
07.10.2018
12:17:52
значит вам не нужен синглетон
Это уж я сам решу, спасибо)

Алексей
07.10.2018
12:18:21
Error:(109, 24) Kotlin: Data class must have at least one primary constructor parameter

Beholder
07.10.2018
12:18:55
а если полей нет - он не скомпилится
напиши просто class Имя - и всё, даже без скобок

dimiii
07.10.2018
12:19:01
Видимо хотелось из-за hashCode/equals, чтобы там красиво true/1 возвращалось
И false при сравнении с объектами других классов

Beholder
07.10.2018
12:19:06
и будет то же самое

Алексей
07.10.2018
12:19:12
напиши просто class Имя - и всё, даже без скобок
Error:(109, 20) Kotlin: Data class must have at least one primary constructor parameter

Алексей
07.10.2018
12:19:47
так вопрос был про data class

вроде как, зачем он нужен, если без полей

Beholder
07.10.2018
12:20:24
зачем писать лишние 4 буквы, если результат такой как ожидается?

dimiii
07.10.2018
12:20:41
вроде как, зачем он нужен, если без полей
Анекдот, как математики заваривают чай.

Руслан
07.10.2018
12:21:15
зачем писать лишние 4 буквы, если результат такой как ожидается?
Изначально было не очевидно что для object не генерится equals

Алексей
07.10.2018
12:22:38
Изначально было не очевидно что для object не генерится equals
Ну если вам нужно сравнивать синглтон с чем-то другим и это может дать true - это очень странно

Beholder
07.10.2018
12:22:56
очевидно ли, что для анонимного класса в джаве ничего само по себе не генерится?

dimiii
07.10.2018
12:23:29
Ну если вам нужно сравнивать синглтон с чем-то другим и это может дать true - это очень странно
Семантика синглтона не гарантирована компилятором. Это факт. О чем тут спорить?

Алексей
07.10.2018
12:23:33
особенно странны переподвыверты с параллельными класслоадерами чтобы иметь несколько синглтонов

Google
Beholder
07.10.2018
12:24:39
вы уходите в какие-то извращения...

Руслан
07.10.2018
12:25:37
особенно странны переподвыверты с параллельными класслоадерами чтобы иметь несколько синглтонов
Это типичная история в какой-нибудь Java EE, когда жирный проект с кучей интеграций. Я лично на такое наталкивался когда с drools работал.

dimiii
07.10.2018
12:25:59
А зачем синглтон вообще нужен?
sealed class Request() data class Login(val username: String, val password: String) : Request() data class Ping(val seq: Int) : Request() object SubscribeTables : Request() ... when (request) { is Login ->

Руслан
07.10.2018
12:26:43
В которых синглтон

Beholder
07.10.2018
12:26:57
в джава private static final MySingleton INSTANCE = ... тоже может получится несколько штук, если задействовать несколько класслоадеров. раньше это никого не смущало?

Алексей
07.10.2018
12:26:59
В которых синглтон
о, пардон, проглядел

object SubscribeTables : Request() Тем не менее, из контекста не очень ясно, зачем он вам:)

Алексей
07.10.2018
12:27:47
имеется ввиду, что запрос всегда будет одним и тем же?

Beholder
07.10.2018
12:28:15
вообще разумное решение - использовать Спринг, одна штука на проложение, и пусть он бины создаёт

dimiii
07.10.2018
12:30:16
>Товарищи, мы тут говорим, а там всё стоит! Стоит заводить issue?

dimiii
07.10.2018
12:32:15
Quantum Harmonizer
07.10.2018
12:33:10
есть вот такой, отклонён https://youtrack.jetbrains.com/issue/KT-14540

https://youtrack.jetbrains.com/issue/KT-15378

Google
dimiii
07.10.2018
12:35:33
есть вот такой, отклонён https://youtrack.jetbrains.com/issue/KT-14540
Надо будет взять за привычку искать не только по открытым, но и отклоненным )

Руслан
07.10.2018
12:36:07
Generate toString() for objects : KT-4107 https://youtrack.jetbrains.com/issue/KT-4107

Тут ещё интересные коменты

dimiii
07.10.2018
12:39:12
Generate toString() for objects : KT-4107 https://youtrack.jetbrains.com/issue/KT-4107
Лол, счастливой отладки, если вдруг KT-4107 примут, а статус KT-14540 не изменится

Beholder
07.10.2018
12:44:08
зачем людям всё надо по автомату?

Boris
07.10.2018
12:45:31
а кто-то на еап-е силайна смог плагин к/н поставить?

а, похоже для последнего еап-а нету плагина :-\

dimiii
07.10.2018
12:58:19
Это явно баг в Jackson Kotlin module. Он должен десериализовывать object по-другому.
Спасибо! Кажется это первый содержательный комментарий.

Boris
07.10.2018
12:59:30
Admin
ERROR: S client not available

Vladimir
07.10.2018
13:02:24
А вообще немного странно выполнять сериализацию/десериализацию синглтонов, если это не иерархия sealed class. В трекере уже не одна issue на тему object: https://github.com/FasterXML/jackson-module-kotlin/issues/147 https://github.com/FasterXML/jackson-module-kotlin/issues/141

По мне так Jackson должен делать что угодно, но не создавать молча ещё один инстанс объекта, который заведомо должен быть синглтоном.

Beholder
07.10.2018
13:15:52
там кстати был вопрос - как json справляется с чтением энумов?

Quantum Harmonizer
07.10.2018
13:16:25
там кстати был вопрос - как json справляется с чтением энумов?
это ж встроенный в джаву тип, все десериализаторы это умеют (рефлексией, конечно же)

Aleksandr
07.10.2018
13:23:29
Всем привет! Хочу уточнить, правильно ли я понял значение модификатора sealed. Если перед объявлением класса Abc написать sealed, то получим класс, который открыт для наследования (автоматически будет open), но закрыт для создания подклкассов в отдельных *.kt файлах. В итоге получается, что можно создать наследников только внутри класса Abc. Если я все правильно понял, тозачем это вообще нужно ? К чему такой контроль дочерних классов ? sealed class Abc {}

Алексей
07.10.2018
13:24:37
но общая суть именно в том, чтобы ограничить число наследников и само наследование

Quantum Harmonizer
07.10.2018
13:25:18
насколько я помню, можно создавать наследников в том же пакете
В 1.0 они должны быть nested, в 1.1 разрешили внутри файла. Про пакет ничего не было (да и котлин не особо укажает пакеты).

Google
Алексей
07.10.2018
13:25:51
а, перепутал немного

Aleksandr
07.10.2018
13:26:57
то есть ради тотального контроля наследников, чтобы все были в куче

Aleksandr
07.10.2018
13:27:32
на практике в андрод в каких случаях это можно заюзать ?

Алексей
07.10.2018
13:28:05
из плюсов - в when можно else не указывать, если аргумент относится к sealed классу

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

или ошибок

но это общая возможность

Quantum Harmonizer
07.10.2018
13:29:12
Aleksandr
07.10.2018
13:29:14
круто!!

Благодарю всех за помощь!!! ????

Beholder
07.10.2018
13:30:45
тут должен был прийти хаскелист и крикнуть "ну вы чё, это ж алгебраические типы, как без них жить!" :)

Igor
07.10.2018
13:55:54
Тогда придется начать с объяснения “что такое атд” (и как плохо жить без паттерн-матчинга)))

Egor
07.10.2018
13:58:30
Ща кто-нибудь бугуртнет, да зачем этот маттерн-патчинг вообще нужен

Boris
07.10.2018
13:59:38
мда, к/н 0.9 похоже сейчас не пощупать.. разве что только найти старый еап

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

интересно, что последний еап вышел 2 числа, а плагин уже 3 и всё равно он для старой версии

Oleg
07.10.2018
14:08:41
мда, к/н 0.9 похоже сейчас не пощупать.. разве что только найти старый еап
А у к\н сейчас случаем не та же версия, что у остального котлина? Посмотри в библиотеках JB их настройки грэдла, в корутинах или в сериализации

Boris
07.10.2018
14:09:32
да не, там проблема в том, что плагина для ide нету для последнего eap-а

clion-а

Страница 927 из 982