Intereting Posts
Android Keystore? .getKey возвращает null на некоторых устройствах Что такое многостраничное текстовое разделение текста приложения travis ci build failing – причина: пространство PermGen Kapt + LoganSquare не работает должным образом при сопоставлении Не удается запустить проект kotlin на Android Studio 3.0 Как написать общий метод расширения в Котлине? Итерабельность и последовательность Котлина выглядят точно так же. Почему требуются два типа? Прочитайте строку и добавьте что-то в конце Пользовательский десериализатор Kotlin Gson для списка Как отключить клавиатуру, когда я нажимаю EditText? Использование функции инфикса приемника в лямбда (для DSL) Динамическое использование AnkoComponent <*>. StartActivity () Как сигнализировать Observable для получения большего количества данных Какой предпочтительный синтаксис при использовании инъекции зависимостей на основе аннотаций в Котлин? Kapt, Kotlin, Dagger2 Ошибка при обработке аннотации

Являются ли неправильные типы Котлина для примитивов на JVM?

Если вызов функции Kotlin подтверждает примитив, скажем, Int , класс «пройден» является тем, что для примитива в штучной упаковке, а не для распакованной версии.

 inline fun <reified T> reify() = T::class @Test fun reified_type_doesnt_match_for_primitive() { assertNotEquals(Int::class, reify<Int>()) assertNotEquals(Int::class.java, reify<Int>().java) assertNotEquals<Any>(Int::class, reify<Int?>()) val nullableInt: Int? = 42 assertNotEquals(nullableInt!!.javaClass.kotlin, reify<Int>()) assertEquals<Any>(java.lang.Integer::class.java, reify<Int>().java) } @Test fun reified_type_matches_for_class() { assertEquals(String::class, reify<String>()) } 

Это ошибка?

    Это несколько запутанно, но текущее поведение по дизайну. Этот подход имеет большое преимущество по сравнению с тем, где мы будем рассматривать T::class.java как примитивный класс. Если функция имеет параметр типа T , то ее класс Java всегда будет равен T::class.java во время выполнения (при условии, что T является окончательным). На самом деле это очень разумная вещь:

      inline fun <reified T : Any> foo(t: T) { assert(T::class.java == t.javaClass) } 

    Это происходит потому , что параметр общего типа T может иметь только опорное значение во время выполнения, которое обязательно штучное значение , если T является примитивным типом.

    Также смотрите тему на форуме Kotlin на эту тему: https://devnet.jetbrains.com/thread/475540