
Leonid
05.09.2018
15:20:24
не-а, не совсем так
kapt не используется
и в js тоже json свой, потому что js.JSON создаёт джсные объекты и не всегда может корректно создать котлиновские

Nail
05.09.2018
15:22:44
Спасибо, что поправил
А как используется?

Google

Leonid
05.09.2018
15:24:13
там компиляторный плагин

Andrey
05.09.2018
15:28:35

Quantum Harmonizer
05.09.2018
15:29:31

Ivan
05.09.2018
15:29:55

OlegKrikun
05.09.2018
15:30:17
@sandwwraith а у вас нет в планах поупароватся в производительность? ?

Andrey
05.09.2018
15:30:21
Как эти проверки делать?
Ну на Kotlin её написать, там и делать. Или kotlin reflection не позволяет выяснить, nullable поле или нет?

Quantum Harmonizer
05.09.2018
15:30:38

Ivan
05.09.2018
15:31:19

OlegKrikun
05.09.2018
15:31:57
Я про json

Leonid
05.09.2018
15:32:31

OlegKrikun
05.09.2018
15:33:29
А насколько это в роадмапе? Или мы бы хотели бы, но хз когда? ?

Andrey
05.09.2018
15:37:08
Kotlin-reflect огромен.
Я без проблем нашёл, как в kotlin-reflect получить, nullable поле или нет, так что не думаю, что есть особые проблемы с реализацией своей фабрики. Вопрос интересный, займусь на досуге, тем более, что кода там не особо много.

Quantum Harmonizer
05.09.2018
15:37:53

Google

Ivan
05.09.2018
15:40:32

Bogdan
05.09.2018
15:41:41
Тяжело подержать в ИДЕ потом

Boris
05.09.2018
15:54:43
Только Джексон только хардкор

Makar
05.09.2018
15:57:55
Привет проггеры
Кто-нибудь занимается созданием игр для Google play?

Alexander
05.09.2018
17:32:44
Зарегистрировался на митап, если в этот раз опять что-то меня туда не пустит, значит судьба.

Konstantine
05.09.2018
18:34:34
Хм, но вроде дает собираться. Странно.

OlegKrikun
05.09.2018
18:54:32
Никакая

Peter
05.09.2018
19:56:02
Добрый вечер, наступил на странное поведение идеи.
Мавен проект с java, мавен используется для подтягивания пары jar в проект, компиляции и запуск сугубо через идею.
Подключил kotlin-maven-plugin по инструкции с kotling-lang, создал папку src\main\kotlin пустой класс - всё работает.
Попробовал создать инстанс котлин-класса из java-main - идея выделяет красным название пакета и делает вид, что не знает такого класса. Build\Rebuild\Run отрабатывают без ошибок.
Насколько я вижу, если package kt файла не совпадает с путём к этому файлу из java класса идея kt-класс не видит, но компиляция отрабатывают нормально. Если поменять пакет - всё хорошо.
Вопрос собственно - это бага или фича?

dimiii
05.09.2018
20:09:21

Peter
05.09.2018
20:10:26
java-main - это public static void main(String[] args)

dimiii
05.09.2018
20:13:37

Peter
05.09.2018
20:15:38
пути к исходникам указаны. Оно ж компилится)
И toString у инстанса дёргается
кинул kt файл внутрь src\main\java - тоже самое.
Пока package для kt не совпадает со структурой папок редактор идеи класса из kt файла не видит (в java классе).
Компиляция и запуск отрабатывают нормально.

dimiii
05.09.2018
20:19:31

Peter
05.09.2018
20:20:25
Хм, мне казалось в котлине не обязательно, чтобы структура папок совпадала с package...

dimiii
05.09.2018
20:21:23

Andrew
05.09.2018
20:21:30
Мне тоже кажется, что редактор должен видеть класс, даже если папка с пакетом не совпадают. Исправление пакета под теущую папку для котлина -- это варнинг+интеншн, а не ошибка.

Peter
05.09.2018
20:22:33
In mixed-language projects, Kotlin source files should reside in the same source root as the Java source files, and follow the same directory structure (each file should be stored in the directory corresponding to each package statement).

Google

dimiii
05.09.2018
20:22:35
Наверное проще будет, если Peter запостит ссылку на проект в репозитории

Peter
05.09.2018
20:22:41
RTFM, таки
Простите
Если кому интересно, это отсюда
https://kotlinlang.org/docs/reference/coding-conventions.html#source-code-organization

Andrew
05.09.2018
20:23:44
Идея их сама местами игнорит :)
Вообще, конечно, чем гадать, проще положить всё как надо и глянуть на результат. Ещё можно в Project structure в идее заглянуть и проверить, что там всё похоже на мавен-конфиг.

Peter
05.09.2018
20:27:40
проще положить всё как надо и глянуть на результат
Тогда редактор всё видит.
Меня интересовало баг на другое поведение создавать, или это норма

Andrew
05.09.2018
21:33:33

Denis
06.09.2018
07:17:41
Добрый день.
У меня есть класс адаптера, который принмает коллекцию типа Any
когда на входных параметрах стояло List<Any> я из другого класса передавал List<Data> и всё работало хорошо.
Теперь я поменял на MutableList<Any> в адаптере и из другого класса передаю MutableList<Data> среда ругается, что нужно передать MutableList<Any>
подскажите, что я не так делаю?)

Denis
06.09.2018
07:18:31
это как понимать вообще?) если так нельзя, то смысл такого Any?)

Mi
06.09.2018
07:19:15
Я думаю смысл в инвариантности списка
Мутабельного*
Ридонли лист хотя бы ковариантен

Denis
06.09.2018
07:22:58
я конечно могу в init{} сделать mutableList.addAll(list), но может можно как-то без этого?

Igor
06.09.2018
07:28:26
Можешь вызвать в списка (это сделает копию списка) .toMutableList()

Ivan
06.09.2018
07:29:49
а можно при создании дата-класса принять в конструкторе один объект, а в property сохранить другой (например принять Int, а сохранить результат Integer.toString() этого Int-а) ?

Igor
06.09.2018
07:30:43

Google

Denis
06.09.2018
07:35:07

Igor
06.09.2018
07:39:18
Вот живой пример с падением:
fun bar(x: MutableList<Any>) = x.add("hello")
fun foo() {
val xs: MutableList<Data> = mutableListOf()
bar(xs as MutableList<Any>) // каст что бы код скомпилировался
val x: Data = xs[0] // тут упадет с ClassCastException
}

Bogdan
06.09.2018
07:44:54

Denis
06.09.2018
07:47:06

Kirill
06.09.2018
07:47:28
Читай про erasure

Denis
06.09.2018
07:47:54
и подскажите, как вставлять код, чтобы он выделялся

Паша
06.09.2018
07:50:11

Admin
ERROR: S client not available

Denis
06.09.2018
07:50:46

Иван
06.09.2018
08:05:33
Yo!
Есть какой-то способ делегировать конструктор в backing field?
Типа такого:
data class Message(val id: Int, val text: String)
data class FatalSystemException(
private val message: Message
) constructor by message
И вызывать:
FatalSystemException(id = 123, text = «qwerty»)

Mikhail
06.09.2018
08:41:28

Nanodesu
06.09.2018
09:42:22
Привет, простой вопрос: если мы сделаем вот так:
val a: Int = 5
val b: Int = a
То a и b будут ссылаться на один объект в памяти? Или b просто скопирует a? Я просто не совсем понимаю как в Котлине работают примитивы

Mi
06.09.2018
09:42:48
в котлине нет примитивов
и учитвая что это две переменные val, разницы особой нет, скопированно значение или ссылается туда же

Nanodesu
06.09.2018
09:44:17
Есть разница, у меня задача требующая хранить очень много интов
Это для оптимизации

Mi
06.09.2018
09:44:46
оптимизации в случае с интами никак быть не может

Google

Mi
06.09.2018
09:45:01
хотя бы потому что ссылка на память это те же 4 байта

Nanodesu
06.09.2018
09:45:31
Разумно

Руслан
06.09.2018
09:46:01

Mi
06.09.2018
09:47:02
например без java знаний

Руслан
06.09.2018
09:47:31
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html
Represents a 32-bit signed integer. On the JVM, non-nullable values of this type are represented as values of the primitive type int.

Mi
06.09.2018
09:47:52
о, спасибо
интересно а без java-бэкграунда можно как-нибудь понять, что даже объект там только ридонли и при его изменении будет копироваться

Руслан
06.09.2018
09:49:11
если сделать например
var a: Int? = 5
val b: Int? = a
то будет объект, причем один и тот же в данном случае, т.к. 5 попадает в int pool. а если больше - то все равно один объект. тут нет никакой магии)

Mi
06.09.2018
09:50:11
что-то вроде
var a: Int? = 25
var b: Int? = a
b++
print(a)
вот где вычитать, что инт априори не мутабельный

Nanodesu
06.09.2018
09:51:05
Так ++ же не изменяет сам объект (по крайней мере int)

Mi
06.09.2018
09:51:21
так а где это написано

Nanodesu
06.09.2018
09:51:22
Это можно легко увидеть, если вызвать напрямую .inc()

Mi
06.09.2018
09:51:22
я про это
там написано "Increments this value."

Руслан
06.09.2018
09:53:07
Ну интересно конечно, это просто ожидаемое поведение
Как-то не ожидаешь что по другому быть может)

Mi
06.09.2018
09:54:15
а не котлина

Руслан
06.09.2018
09:54:52
Ну в документации это поведение описано
The inc() and dec() functions must return a value, which will be assigned to the variable on which the ++ or -- operation was used. They shouldn't mutate the object on which the inc or dec was invoked.