Size: a a a

2019 September 18

Ⓢⓔⓡⓖ in Kotlin Moscow
👍
источник

AN

Alexander Nozik in Kotlin Moscow
Народу на удивление понравилось. Было небольшое обсуждение в котлин чатах.
источник

IK

Igor Kalishevsky in Kotlin Moscow
Здравствуйте, товарищи.

Я тут всерьёз начал учить kotlin, и как действующий питонист не совсем втыкаю в generic'и, in, out, и это всё.
Предположим, я хочу написать функцию, которая будет получить либо лист листов со строками, либо лист листов с хешмапами, либо хешмапы, в которых ключ -- хешмапа mutableMapOf<MutableMap<String, String>, String>.

Проблема в том, что для мапы javaClass.isAssignableFrom(Collection) не труэ.
Изначальная идея была такая:
fun <T: Collection<Collection<Any>>> sampleCollection(arg: T)


Я понимаю, что задача притянута за уши, я её специально притянул, чтобы усложнить кейс.

PS. Где толково рассказывают про generic'и кроме котлиновского мануала?
источник

AN

Alexander Nozik in Kotlin Moscow
Igor Kalishevsky
Здравствуйте, товарищи.

Я тут всерьёз начал учить kotlin, и как действующий питонист не совсем втыкаю в generic'и, in, out, и это всё.
Предположим, я хочу написать функцию, которая будет получить либо лист листов со строками, либо лист листов с хешмапами, либо хешмапы, в которых ключ -- хешмапа mutableMapOf<MutableMap<String, String>, String>.

Проблема в том, что для мапы javaClass.isAssignableFrom(Collection) не труэ.
Изначальная идея была такая:
fun <T: Collection<Collection<Any>>> sampleCollection(arg: T)


Я понимаю, что задача притянута за уши, я её специально притянул, чтобы усложнить кейс.

PS. Где толково рассказывают про generic'и кроме котлиновского мануала?
"либо лист листов со строками, либо лист листов с хешмапами, либо хешмапы, в которых ключ -- хешмапа" с точки зрения Котлин очень не просто сделать и лучше не делать. Проекции тут не помогут
источник

AN

Alexander Nozik in Kotlin Moscow
С точки зрения котлин лучше сделать перегрузку функции с разными типами аргумента, при этом там дженерики не нужны совсем.
источник

AN

Alexander Nozik in Kotlin Moscow
В смысле проекции
источник

VV

Vladislav Verminsky in Kotlin Moscow
Котлиновские дженерики лежат на плечах у джава дженериков. Так что для полного понимания нужно изучить джава дженерики. Главное это понять что такое type erasures. Ну а вариантность и ковариантность понять не сложно, только покурить нужно :)
источник

IK

Igor Kalishevsky in Kotlin Moscow
Окей, спасибо. Погляжу в джаву сначала :)
источник

AN

Alexander Nozik in Kotlin Moscow
Vladislav Verminsky
Котлиновские дженерики лежат на плечах у джава дженериков. Так что для полного понимания нужно изучить джава дженерики. Главное это понять что такое type erasures. Ну а вариантность и ковариантность понять не сложно, только покурить нужно :)
Не надо, во-первых проекции другие, во вторых хватит все время в джаву смотреть.
источник

AN

Alexander Nozik in Kotlin Moscow
Igor Kalishevsky
Окей, спасибо. Погляжу в джаву сначала :)
Вы официальную документацию читали? По ней есть вопросы? Просто ваш пример вообще для котлин не годится
источник

VV

Vladislav Verminsky in Kotlin Moscow
Саша, ты громкие заявления делаешь. Весь Котлин на джаве. Пока у Котлина не будет своего рантайма, без хорошего знания джавы/jvm никогда не будешь понимать хорошо Котлин. Не будь так категоричен.
источник

IK

Igor Kalishevsky in Kotlin Moscow
Alexander Nozik
Вы официальную документацию читали? По ней есть вопросы? Просто ваш пример вообще для котлин не годится
Почитал, конечно. Просто я предпочитаю ставить сложную задачу, которую я точно не знаю как решать :)
источник

AN

Alexander Nozik in Kotlin Moscow
Vladislav Verminsky
Саша, ты громкие заявления делаешь. Весь Котлин на джаве. Пока у Котлина не будет своего рантайма, без хорошего знания джавы/jvm никогда не будешь понимать хорошо Котлин. Не будь так категоричен.
Нет. Котлин - это Котлин. Я преподаю этот язык, и у питонистов он отлично ложится без всякой джавы
источник

AN

Alexander Nozik in Kotlin Moscow
Igor Kalishevsky
Почитал, конечно. Просто я предпочитаю ставить сложную задачу, которую я точно не знаю как решать :)
Ну надо ставить корректную задачу. В случае, скажем листа листов интов, будет List<List<Int>>. Тут ничего сложного. Проекции лучше оставить на потом, они действительно довольно сложные.
источник

IK

Igor Kalishevsky in Kotlin Moscow
С коллекциями я это сделал тогда ещё. Интересно же исследовать границы возможного )
источник

IK

Igor Kalishevsky in Kotlin Moscow
Ещё доброшу вопрос. На днях я изрядно пострадал с querydsl + hibernate, потому что querydsl не умеет в hibernate старше 5.2, потому что там какая-то возня на гитхабе за право альфа-коммитера. Потом я решил сбросить обороты и поставить hibernate-types, потому что хотелось в orm видеть array'и постгресовские. Сбросил hibernate до 5.2. Поскольку у меня 11 джава из которой повыпиливали всякие javax, пришлось по exception'ам смотреть в гугл и узнавать что там вообще выпилили. Квест я выполнил. Вопрос такой: есть ли какая-то штука, которая умеет это всё делать автоматически?)
источник

AN

Alexander Nozik in Kotlin Moscow
Про JVM надо знать про мониторы, потоки, боксинг и так далее. Но во-первых это JVM, а не Java, а во-вторых, это этап оптимизации приложения, а не изучения языка.
источник

SB

Sergey Barmin in Kotlin Moscow
Vladislav Verminsky
Саша, ты громкие заявления делаешь. Весь Котлин на джаве. Пока у Котлина не будет своего рантайма, без хорошего знания джавы/jvm никогда не будешь понимать хорошо Котлин. Не будь так категоричен.
Скорее для понимания какие есть библиотеки и если уже лезть в их сорцы, там джава нужна
источник

AN

Alexander Nozik in Kotlin Moscow
Igor Kalishevsky
С коллекциями я это сделал тогда ещё. Интересно же исследовать границы возможного )
Опять же надо пример взять корректный. Корректно напиример исследовать List<out Number> и работать, скажем, с Double
источник

AN

Alexander Nozik in Kotlin Moscow
Igor Kalishevsky
Ещё доброшу вопрос. На днях я изрядно пострадал с querydsl + hibernate, потому что querydsl не умеет в hibernate старше 5.2, потому что там какая-то возня на гитхабе за право альфа-коммитера. Потом я решил сбросить обороты и поставить hibernate-types, потому что хотелось в orm видеть array'и постгресовские. Сбросил hibernate до 5.2. Поскольку у меня 11 джава из которой повыпиливали всякие javax, пришлось по exception'ам смотреть в гугл и узнавать что там вообще выпилили. Квест я выполнил. Вопрос такой: есть ли какая-то штука, которая умеет это всё делать автоматически?)
Это - это что? Не совсем понял
источник