android - 如何制作一个返回通用对象的函数?
问题描述
我正在尝试创建一个返回 T/Any 对象的函数。唯一的问题是我不太确定该怎么做。
fun readMockData(context: Context, filename: String): Any {
val json = context.assets.open("$filename.json").bufferedReader().use(BufferedReader::readText)
return RetrofitSingleton.GSON.fromJson(json, object : TypeToken<Any>() {}.type)
}
这是我最初尝试的方法,但出现错误。我应该如何正确执行此功能?
解决方案
如果我正确理解您的问题,这就是您所需要的:
@OptIn(ExperimentalStdlibApi::class)
inline fun <reified T> readMockData(context: Context, filename: String): T {
val json = context.assets.open("$filename.json").bufferedReader().use(BufferedReader::readText)
return RetrofitSingleton.GSON.fromJson(json, typeOf<T>().javaType)
}
请注意,它必须是内联的,否则无法获取类型。如果您的函数比上面的更长,最好将其拆分为内联具体化包装器和接受Type
作为参数的主函数。
它使用反射,因此您需要为其添加依赖项。此外,typeOf()
它是实验性的,但根据我的经验,它可以正常工作(至少在 JVM 上)并且它已经存在了很长时间,所以我猜它不会改变。
推荐阅读
- matlab - 图形阅读程序可以给我们无理数吗?
- firebase - 从 Firebase 读取数据 - Flutter
- wordpress - WooCommerce:站点范围的 cookie 过滤器
- asp.net-core - NLog 未将日志发送到 AWS CloudWatch
- javascript - 使用javascript在虚拟键盘上按下键时自动提示文本区域
- javascript - 当在 url 中推送查询参数同时保持在同一路径上时,Vue.js 中的“NavigationDuplicated”异常是否有任何解决方法
- javascript - 中键点击标签栏打开新标签
- c# - C# .NET 验证功能不会影响两个输入字段
- r - 在 r 中的 sf MULTIPOLYGON 内生成样本
- postgresql - PostgreSQL 何时在后台创建临时表?