gpt4 book ai didi

android - 如何将对象数据类型传递给类或函数?

转载 作者:行者123 更新时间:2023-11-30 05:07:24 25 4
gpt4 key购买 nike

这段代码的结果就是我想要的:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com