Size: a a a

Kotlin Community

2020 June 02

I

Ivan in Kotlin Community
Есть вот такой класс

abstract class AdapterItem (val s: String, val i: Int)

Как правильно наследовать от него data class, добавив в него новое проперти?

Вот такое не работает по понятным причинам:

data class NotificationAdapterItem(
  private val b: Boolean,
  s: String,
  i: Int
) : AdapterItem<String>(s, i)
источник

IO

Iaroslav Orlov in Kotlin Community
Ivan
Есть вот такой класс

abstract class AdapterItem (val s: String, val i: Int)

Как правильно наследовать от него data class, добавив в него новое проперти?

Вот такое не работает по понятным причинам:

data class NotificationAdapterItem(
  private val b: Boolean,
  s: String,
  i: Int
) : AdapterItem<String>(s, i)
дата класс может реализовать интерфейс
источник

IO

Iaroslav Orlov in Kotlin Community
поэтому можете сделать так:
interface AdapterItem { val s: String
val i: Int }
источник

AA

Andrey Antipov in Kotlin Community
Добрый день. Никто не в курсе, есть ли в планах разделение data аспекта класса на несколько?
Заметил, что периодически возникает необходимость сделать data class, но без copy, чтобы не "светить" приватный конструктор.
источник

IO

Iaroslav Orlov in Kotlin Community
Iaroslav Orlov
поэтому можете сделать так:
interface AdapterItem { val s: String
val i: Int }
а в дата классе: data class ... (override val s: String...) : AdapterItem
источник

I

Ivan in Kotlin Community
Iaroslav Orlov
а в дата классе: data class ... (override val s: String...) : AdapterItem
да, понял, спасибо
источник

i

i_vovolk in Kotlin Community
Ivan
Есть вот такой класс

abstract class AdapterItem (val s: String, val i: Int)

Как правильно наследовать от него data class, добавив в него новое проперти?

Вот такое не работает по понятным причинам:

data class NotificationAdapterItem(
  private val b: Boolean,
  s: String,
  i: Int
) : AdapterItem<String>(s, i)
data class Foo(override val s: String, override val i: Int, val new: Any): AdapterItem(s,i)
источник

IO

Iaroslav Orlov in Kotlin Community
Andrey Antipov
Добрый день. Никто не в курсе, есть ли в планах разделение data аспекта класса на несколько?
Заметил, что периодически возникает необходимость сделать data class, но без copy, чтобы не "светить" приватный конструктор.
в keep'ах такого не замечал. так что, нет
источник

IO

Iaroslav Orlov in Kotlin Community
на правах костыля можно делать конструктор internal либо генерировать свои equals/hashCode/componentX
источник

AA

Andrey Antipov in Kotlin Community
Iaroslav Orlov
на правах костыля можно делать конструктор internal либо генерировать свои equals/hashCode/componentX
internal не поможет, так как copy - public и всё равно засветит параметры, то есть на стороне пользователя достаточно иметь один экземпляр объекта, чтобы получить доступ к полному аналогу приватного конструктора.
Кодогенерация - тоже костыль: усложняется сборка плюс исходный код распухает.
Жаль конечно, очень полезно было бы иметь отдельные деривативы (аспекты) для equals/hashCode, toString, componentX, copy. Или какую-нить аннотацию времени компиляции для отключения части генерации у data class
источник

BP

Bogdan Panchenko in Kotlin Community
Andrey Antipov
internal не поможет, так как copy - public и всё равно засветит параметры, то есть на стороне пользователя достаточно иметь один экземпляр объекта, чтобы получить доступ к полному аналогу приватного конструктора.
Кодогенерация - тоже костыль: усложняется сборка плюс исходный код распухает.
Жаль конечно, очень полезно было бы иметь отдельные деривативы (аспекты) для equals/hashCode, toString, componentX, copy. Или какую-нить аннотацию времени компиляции для отключения части генерации у data class
Попробовать определить copy самому 🤔🙃
источник

QH

Quantum Harmonizer in Kotlin Community
Andrey Antipov
Добрый день. Никто не в курсе, есть ли в планах разделение data аспекта класса на несколько?
Заметил, что периодически возникает необходимость сделать data class, но без copy, чтобы не "светить" приватный конструктор.
источник

ℕo ℕame in Kotlin Community
Кто знает что можно почитать про создание интерпретаторов / компиляторов? Желательно с примерами на джава/котлин и не больше 500-600 стр. Т.к. просто для интереса
источник

QH

Quantum Harmonizer in Kotlin Community
ℕo ℕame
Кто знает что можно почитать про создание интерпретаторов / компиляторов? Желательно с примерами на джава/котлин и не больше 500-600 стр. Т.к. просто для интереса
Dragonbook, например. Сам почти не читал, за качество не ручаюсь.
источник

D

Denys in Kotlin Community
ℕo ℕame
Кто знает что можно почитать про создание интерпретаторов / компиляторов? Желательно с примерами на джава/котлин и не больше 500-600 стр. Т.к. просто для интереса
Есть современная классика: craftinginterpreters.com/

Но на java/kotlin нужно самому переделывать
источник

KT

Kirill Timofeev in Kotlin Community
Quantum Harmonizer
Dragonbook, например. Сам почти не читал, за качество не ручаюсь.
Не надо dragonbook. Он морально устарел.
Лучше https://www.amazon.com/Modern-Compiler-Implementation-Andrew-Appel/dp/052182060X

Там примеры как раз на java (оригинальная книга была написана с примерами на OCaml)
источник

KT

Kirill Timofeev in Kotlin Community
Denys
Есть современная классика: craftinginterpreters.com/

Но на java/kotlin нужно самому переделывать
Плюсую классику
источник

I

Igor in Kotlin Community
А как они там пишут компилятор без паттерн матчинга 🤔
источник

KT

Kirill Timofeev in Kotlin Community
Igor
А как они там пишут компилятор без паттерн матчинга 🤔
Я сам не читал, но не думаю, что отсутствие паттерн матчинга является самой большой сложностью при написании компилятора :)
источник

AN

Alexander Nozik in Kotlin Community
Igor
А как они там пишут компилятор без паттерн матчинга 🤔
Сюрпрайз. Компиляторы-то все на с/спп/джава.
источник