🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
**Kotlin中的内联函数在编译的时候编译器便会将相应函数的字节码插入调用的地方,也就是说,参数类型也会被插入字节码中,我们就可以获取参数的类型了**。有关内联函数的内容可以看一下前面的相应章节。下面我们就用内联函数来实现一个可以获取泛型参数的方法: ``` inline fun <reified T> getType() { return T::class.java } ``` **使用内联函数获取泛型的参数类型非常简单,只需加上reified关键词即可。这里的意思相当于,在编译的会将具体的类型插入相应的字节码中,那么我们就能在运行时获取到对应参数的类型了**。所以,我们可以在Kotlin中改进Gson的使用方式: inline fun <reified T : Any> Gson.fromJson(json: String): T { //对Gson进行扩展 return Gson().fromJson(json, T::class.java) } //使用 val json = ... val stringList = Gson().fromJson<List<String>>(json) 这里**利用了Kotlin的扩展特性对Gson进行了功能扩展,在不改变原有类结构的情况下新增方法,很多场景用Kotlin来实现便会变得更加优雅**。有关扩展的相关内容会在第7章讲解。 另外需要注意的一点是,**Java并不支持主动指定一个函数是否是内联函数,所以在Kotlin中声明的普通内联函数可以在Java中调用,因为它会被当作一个常规函数;而用reified来实例化的参数类型的内联函数则不能在Java中调用,因为它永远是需要内联的。**