android - Kotlin 通用函数响应
问题描述
我正在尝试编写一个通用函数,它从文件中读取一个 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
解决方案
您需要替换::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
}
推荐阅读
- charts - chartjs 将百分比添加到饼图图例
- ios - 如何在 SwiftUI 中汇总过滤后的核心数据?
- c# - 有人可以帮我为我的方法的每个编码路径添加一个返回值吗?
- c# - 手动将行添加到 DataGridView c#
- sql - 在 postgreSQL 9.6 中访问 json 类型数据时出错
- powershell - 在 Docker 中运行 Azure DevOps 作业时出现“找不到具有给定版本的模块 Az.Accounts”错误
- angular - Angular 7/8 - 内容如何自动刷新
- angular - 无法使用路线显示数据
- flutter - 如何在颤振中添加分隔线,有没有按钮?
- c# - 问题执行代码 Sharepoint C# 控制台应用程序以使用 API 获取 Sharepoint 信息