Я пытаюсь написать общую функцию, которая считывает строку json из файла и анализирует ее на ожидаемый объект. Ожидаемый объект - это класс данных.
fun <T: Any> read(fileName: String, type: KClass<T>): T? {
val file = File(fileName)
if(!file.exists()) {
return null
}
val str = file.readText()
val data = Gson().fromJson<T>(str, type::class.java)
return data
}
Он работает до тех пор, пока не будет выполнен синтаксический анализ json, который, к сожалению, не создает объект типа class kotlin.reflect.jvm.internal.KClassImpl
.
Я ожидал ответа
val data = Gson().fromJson<T>(str, type::class.java)
Быть T
. Как получить возвращаемый объект типа T
?
При попытке запустить указанную выше функцию выдается следующее исключение:
java.lang.ClassCastException: kotlin.jvm.internal.ClassReference cannot be cast to my.app.Models.DemoModel
1 ответ
Вам необходимо заменить ::class.java
на .java
. Как вариант, вы можете переписать его так:
inline fun <reified T: Any> read(fileName: String): T? {
val file = File(fileName)
if(!file.exists()) {
return null
}
val str = file.readText()
val data = Gson().fromJson<T>(str, T::class.java)
return data
}
Похожие вопросы
Новые вопросы
android
Android - это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфоны, планшеты, автомобили, телевизоры, одежда, стекло, IoT). Для тем, связанных с Android, используйте специальные теги Android, такие как android-intent, android-activity, android-адаптер и т. Д. Для вопросов, не связанных с разработкой или программированием, но связанных с платформой Android, используйте эту ссылку: https: // android.stackexchange.com .