作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这段代码的结果就是我想要的:
override fun onResponse(call:Call<MainResp<ItemMaterial>>,response:Response<MainResp<ItemMaterial>>){
val arawjson: String = Gson().toJson(response.body())
val dataType = object : TypeToken<MainResp<ItemMaterial>>() {}.type
val mainResp: MainResp<ItemMaterial> = Gson().fromJson<MainResp<ItemMaterial>>(arawjson, dataType)
........
}
但是当我把它变成简单的类时,我就可以使用对象数据类型参数访问每个函数。
class Convert<T>{
//fungsi umum untuk konversi gson sesuai dengan output datatype sebagai parameter yakni T
fun convertRespByType(response: Response<MainResp<T>>): MainResp<T> {
val arawjson: String = Gson().toJson(response.body())
val dataType = object : TypeToken<MainResp<T>>() {}.type
val mainResp: MainResp<T> = Gson().fromJson<MainResp<T>>(arawjson, dataType)
return mainResp
}
}
并称它为:
override fun onResponse(call:Call<MainResp<ItemMaterial>>,response:Response<MainResp<ItemMaterial>>){
val aconvert : Convert <ItemMaterial> = Convert()
val mainResp : MainResp<ItemMaterial> = aconvert.convertRespByType(response)
........
}
但是我在类里面调用的第二个结果与第一个不同?我认为参数没有传递给类。你能给我一个推荐吗?
谢谢
最佳答案
问题是type erasure .
在声明中TypeToken<MainResp<T>>()
类型 T
在运行时不可用。
在 Kotlin 中你可以使用 inline reified解决你的问题。 Reified 只适用于函数而不适用于类:
inline fun <reified T> convertRespByType(response: Response<MainResp<T>>): MainResp<T> {
val arawjson: String = Gson().toJson(response.body())
val dataType = object : TypeToken<MainResp<T>>() {}.type
val mainResp: MainResp<T> = Gson().fromJson<MainResp<T>>(arawjson, dataType)
return mainResp
}
用法:
val mainResp = convertRespByType<ItemMaterial>(response)
关于android - 如何将对象数据类型传递给类或函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54339048/
我是一名优秀的程序员,十分优秀!