Являются ли неправильные типы Котлина для примитивов на 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

    Intereting Posts
    Kotlin – Невозможно использовать параметр T в качестве параметра типа reified. Вместо этого используйте класс Не удается получить доступ к внешнему классу из анонимного класса Как заставить вызовы некоторым конструкторам / функциям использовать именованные аргументы? RxJava2 switchIfEmpty и проверка выполнения Обработка аннотации kotlin: проверьте, задан ли TypeElement из класса kotlin Создание ArrayList уникальных элементов в ArrayList Должны быть объявлены локальные функции Котлина перед использованием Создайте класс POJO для Kotlin Тесты Spring Boot не используют контекст повторно Как запросить тип данных Firebase Firestore Reference? Котлин: массив дженериков Что такое простой способ конвертировать динамически объекты Kotlin / Js в простой объект javascript? Как проверить класс «instanceof» в kotlin? Создание нового каталога с использованием Kotlin, Mkdir () не работает Имущество с различным типом