当前位置: 首页 > news >正文

Kotlin reified改造JSON解析

reified有什么用?

fun <T> myGenericFun(c: Class<T>) 

在myGenericFun泛型函数体内,无法访问类型T,因为T只有在编译时可用,但在运行时就被擦除了,也就是泛型擦除,。因此,如果想在函数体中使用泛型类型作为普通类型使用,就需要显式将该类作为参数传递,如myGenericFun中所示。

如果使用reified T创建内联(inline)函数,则就算在运行时也可以访问 T 的类型,因此不需要另外传递 Class。可以像普通Class一样使用 T - 例如想检查一个变量是否是 T 的实例,可以轻松做到这一点:myVar is T。

这个reified T的内联(inline)函数如下所示:

inline fun <reified T> myGenericFun()

reified 工作原理

只能将reified与内联(inline)函数结合使用。通过这样做,可以告诉编译器将函数的字节码复制到调用该函数的每个位置(编译器“内联”该函数)。当调用具有reified的内联(inline)函数时,编译器必须能够知道作为类型参数传递的实际类型,以便可以修改生成的字节码以直接使用相应的类。因此,像 myVar is T 这样的调用在字节码中会变成 myVar is String(如果类型参数是 String)。

改造案例

可以采用reified封装JSON解析方法。

inline fun <reified T> Gson.fromJson(json: String) =fromJson<T>(json, object : TypeToken<T>(){}.type)

重要提示:具有reified类型的内联(inline)函数不能从 Java 代码中调用

感谢大家的支持,如有错误请指正,如需转载请标明原文出处!


http://www.mrgr.cn/news/22076.html

相关文章:

  • Origin 2024中文版下载安装教程最新版百度网盘分享链接地址
  • vulhub Thinkphp5 2-rce远程代码执行漏洞
  • C++ STL 数据结构 vector基本用法
  • UnLua调用C++函数
  • 嵌入式秋招面试 学习 面试经验提醒和分享
  • 活期存款类型
  • 物联网之ESP32开发板简介、Arduino
  • 01 Docker概念和部署
  • 【重学 MySQL】十七、比较运算符的使用
  • Python画笔案例-038 绘制齿形图
  • Arch - 架构安全性_认证(Authentication)的标准和实现
  • FreeRTOS-基本介绍和移植STM32
  • 【论文编写】利用在线工具生成表格图片的Latex语句
  • k8s笔记
  • 小白也能看得懂!如何在浏览器插件的文件中合法引入第三方依赖远程代码?
  • 开放式耳机好用?平价开放式耳机推荐?四款开放式的蓝牙耳机推荐
  • vcpkg子包路径批量获取
  • 新160个crackme - 051-Keygenning4newbies
  • 大量数据相似度加速计算
  • 【Spring基础1】- Spring 启示录-理解IoC控制反转