上面的 Gson 解析的时候用的非常广泛,比如咱们项目里就有这样的扩展方法: inlinefun<reifiedT>String?.toObject(type:Type? =null): T? {returnif(type !=null) { GsonFactory.GSON.fromJson(this, type) }else{ GsonFactory.GSON.fromJson(this, T::class.java) } } 回到顶部 总结 本文花了非常大的篇...
在kotlin中一个inline可以被具体化reified,这意味着我们可以得到使用泛型类型的Class。 项目中使用的自定义扩展Gson //定义`Gson`的扩展函数 inline fun <reified T> Gson.fromJson(json:String):T = fromJson(json,T::class.java) 1. 2. 4. 注解@UnsafeVariance public interface List<out E> : Collection<...
val p1 = gson.fromJson(json, DefaultPart::class.java) println("gson parse json: $p1") val p2 = moshi.adapter(DefaultPart::class.java).fromJson(json) println("moshi parse json: $p2") } // 结果 // gson parse json: DefaultPart(name=null, gender=null, age=17) // moshi parse json...
inline fun<reifiedT>Gson.fromJson(json:String):T{returnfromJson(json,T::class.java)} 这是一个 Gson 的扩展方法,有了这个之后我们就无须在 Kotlin 当中显式的传入一个 class 对象就可以直接反序列化 json 了。 这个会让人感觉到有点儿迷惑,实际上由于是内联的方法调用,T 的类型在编译时就可以确定的:...
我们首先看下一般我们使用gson解析json是怎么做的 在Java序列化库(如Gson)中,当您想要反序列化该JSON字符串时,您最终必须将Class对象作为参数传递,以便Gson知道您想要的类型。 代码语言:txt AI代码解释 User user = new Gson().fromJson(getJson(), User.class) ...
上面的 Gson 解析的时候用的非常广泛,比如咱们项目里就有这样的扩展方法: inline fun <reified T> String?.toObject(type: Type? = null): T? { return if (type != null) { GsonFactory.GSON.fromJson(this, type) } else { GsonFactory.GSON.fromJson(this, T::class.java) } } 总结 本文花了...
fun <reified T: Any> Gson.fromJson(json): T = this.fromJs on(json, T::class.java) 命名风格 如有疑惑,默认为Java编码约定,比如: 使用骆 驼命名法(在命名中避免下划线) 类型名称首字母大写 方法和属性首字母小写 缩进用四个空格 public 方法要写说明文档,这样它就可以出现在 Kotllin Doc 中 ...
}//例子 通过inline把这个前面的代码植入到后面// reified让泛型参数具体化,定义在inline中 ,kotlin实现为伪泛型,需要这个关键字植入到调用出才可以inlinefun<reifiedT>Gson.fromJson(json:String):T=fromJson(json,T::class.java)//模拟网络请求返回的json数据,得到bean类valperson=Person("shiming",20) ...
fromJson(json, T::class.java) 现在,在我们的Kotlin代码中,我们可以反序列化JSON字符串,甚至根本不需要传递类型信息! val user: User = Gson().fromJson(json) Kotlin根据它的用法推断出类型 - 因为我们将它分配给User类型的变量,Kotlin使用它作为fromJson()的类型参数 ...
首先在项目中添加Gson的依赖项,如下所示 implementation 'com.google.code.gson:gson:2.8.8' 现在将Person类移到函数外部,Gson不适用于本地类 最后,您可以根据需要创建一个深度副本 val type = object : TypeToken<ArrayList<Person>>(){}.type val json = Gson().toJson(peopleAtBlock1, type) ...