Size: a a a

Kotlin Community

2019 November 11

AN

Alexander Nozik in Kotlin Community
Quantum Harmonizer
а ещё есть массивы примитивов...
Вот они идут отдельно. Но они и так отдельные классы, которые не наследуют массив.
источник

VP

Vladimir Petrakovich in Kotlin Community
Quantum Harmonizer
ИМХО, Array<> нужен, но как инлайн-класс над Object[], реализующий List. Просто когда его делали, инлайн-классов ещё и в проекте не было)
Интероп поплыл бы, там ведь не только Object[]
источник

AN

Alexander Nozik in Kotlin Community
Но в идеале я бы сказал, что компилятор тоже должен определять примитивы и подставлять DoubleArray вместо Array<Double>
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
Но в идеале я бы сказал, что компилятор тоже должен определять примитивы и подставлять DoubleArray вместо Array<Double>
Так это не одно и то же. Абстрагировать это не получится.
источник

QH

Quantum Harmonizer in Kotlin Community
Vladimir Petrakovich
Интероп поплыл бы, там ведь не только Object[]
да, насратб, я вот и запилил себе инлайн-класс Arr, у которого внутри стёртый массив
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
Так это не одно и то же. Абстрагировать это не получится.
Единственная проблема, по которой нельзя массив унаследовать от листа - это рефлексия.
источник

КР

Кирилл Романенко in Kotlin Community
Vladimir Petrakovich
Так это не одно и то же. Абстрагировать это не получится.
При замене ничего не сломается, но станет по-лучше
источник

VP

Vladimir Petrakovich in Kotlin Community
Quantum Harmonizer
да, насратб, я вот и запилил себе инлайн-класс Arr, у которого внутри стёртый массив
У себя можно что угодно делать, это не stdlib)
источник

VP

Vladimir Petrakovich in Kotlin Community
Кирилл Романенко
При замене ничего не сломается, но станет по-лучше
Не сломается, серьёзно? А ничего, что DoubleArray не является Array?
источник

AN

Alexander Nozik in Kotlin Community
Это вообще довольно неприятный головняк. Я где-то уже писал об этом. Сейчас надо кучу кода дублировать, если ты хочешь работать и с массивами и с листами.
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
Не сломается, серьёзно? А ничего, что DoubleArray не является Array?
Я не совсем про это говорил, а про автоспециализацю.
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
Это вообще довольно неприятный головняк. Я где-то уже писал об этом. Сейчас надо кучу кода дублировать, если ты хочешь работать и с массивами и с листами.
Кстати в котлине нет такого интерфейса для списка, который был бы идентичен массиву. Ни List, ни MutableList не подходит.
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
Кстати в котлине нет такого интерфейса для списка, который был бы идентичен массиву. Ни List, ни MutableList не подходит.
Потому что туда натянуто несколько лишних методов из Java Collections. Но добавить дефолтные реализации для недостающих методов и сделать MutableList не проблема.
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
Потому что туда натянуто несколько лишних методов из Java Collections. Но добавить дефолтные реализации для недостающих методов и сделать MutableList не проблема.
А как их можно реализовать по-нормальному?
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
А как их можно реализовать по-нормальному?
так же как в ArrayList
источник

BP

Bogdan Panchenko in Kotlin Community
Alexander Nozik
Я вообще думаю, что Array<> - это стратегическая ошибка. Лучше бы его к листу сразу компилятором приводили
+
источник

AN

Alexander Nozik in Kotlin Community
Я исследовал вопрос. Кроме рефлексии вообще проблем нет.
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
так же как в ArrayList
Ну это уже получится не просто обёртка над массивом, а ArrayList с исходным массивом в конструкторе.
источник

AN

Alexander Nozik in Kotlin Community
Vladimir Petrakovich
Ну это уже получится не просто обёртка над массивом, а ArrayList с исходным массивом в конструкторе.
Ну там выше писали. Представляем себе инлайновый ArrayList, убираем add/remove и вуаля
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Nozik
Ну там выше писали. Представляем себе инлайновый ArrayList, убираем add/remove и вуаля
Так нельзя взять и убрать add/remove. Либо это MutableList, либо нет.
источник