class com.google.gson.internal.LinkedTreeMap 无法转换为 class Return
class com.google.gson.internal.LinkedTreeMap cannot be cast to class Return
java.lang.ClassCastException: class com.google.gson.internal.LinkedTreeMap 无法转换为 class
val listReturn: Return<List<Category>> = Http.getObject("category/get")//fail
fun <T> getObject(url: String): T {
val type = object : TypeToken<T>() {}.type
return Gson().fromJson(get(url), type)
}
val get = Http.get("category/get")
val type = object : TypeToken<Return<List<Category>>>() {}.type
println(Gson().fromJson<Return<List<Category>>>(get, type).data)//success
这是由 JVM 上的类型擦除引起的:在运行时,函数 getObject
不知道 T 是什么类型。您需要使它成为一个内联函数并使用具体化的类型。按如下方式更改它,它应该可以工作:
inline fun <reified T> getObject(url: String): T {
... leave body as before
}
java.lang.ClassCastException: class com.google.gson.internal.LinkedTreeMap 无法转换为 class
val listReturn: Return<List<Category>> = Http.getObject("category/get")//fail
fun <T> getObject(url: String): T {
val type = object : TypeToken<T>() {}.type
return Gson().fromJson(get(url), type)
}
val get = Http.get("category/get")
val type = object : TypeToken<Return<List<Category>>>() {}.type
println(Gson().fromJson<Return<List<Category>>>(get, type).data)//success
这是由 JVM 上的类型擦除引起的:在运行时,函数 getObject
不知道 T 是什么类型。您需要使它成为一个内联函数并使用具体化的类型。按如下方式更改它,它应该可以工作:
inline fun <reified T> getObject(url: String): T {
... leave body as before
}