Неправильный вывод для параметра типа reified в Котлине

Учитывая следующий код в Котлине:

import com.fasterxml.jackson.module.kotlin.* data class MyReply<R> ( val results : Array<R>? = null ) class ErrorClient() { val JSON = jacksonObjectMapper() inline fun<reified R> request(): Array<R>? { val json_in = """{"results": [2]}""" val res: MyReply<R> = JSON.readValue(json_in) return res.results } fun read(): Array<Int>? { val res: Array<Int>? = request() return res } } 

и следующие тесты:

 import org.junit.Test class ErrorTest { val client = ErrorClient() @Test fun `direct`() { val res: Array<Int>? = client.request() println(res) } @Test fun `indirect`() { val res : Array<Int>? = client.read() println(res) } } 

Рассказ: первый тест проходит, а второй терпит неудачу. Зачем?

Длинная история: я испытываю неправильный вывод типа reified параметра R при вызове встроенной функции с помощью метода класса read() , но работает прямой вызов request() . В косвенном случае тип ошибочно определяется как java.lang.Object, и, следовательно, тест терпит неудачу с

 java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer; at ErrorClient.read(Error.kt:17) at ErrorTest.indirect(ErrorTest.kt:14) 

    Речь идет не о reified . Я тестирую код с помощью

     val res: MyReply<R> = MyReply() 

    Это не вызывает никаких ошибок. Эта проблема заключается в том, что ваш JSON.readValue возвращает Object вместо Integer . Kotlin пытается передать его Integer но он терпит неудачу.