Avatar ·

如何在 Kotlin 中使用 TypeToken 处理 Gson 泛型(解决 com.google.gson.internal.LinkedTreeMap 错误)

大家好!我已经好几天在解决 Kotlin 中使用泛型时 JSON 反序列化的问题。我有一个函数,它接受一个类类型并返回解析后的对象。在 Java 中,我会写类似 `new TypeToken>(){}.getType()` 的代码,但在 Kotlin 中由于泛型擦除,这不起作用。 这是一个简化的例子: ```kotlin data class User(val name: String, val age: Int) fun parseList(json: String, clazz: Class): List { val type = TypeToken.getParameterized(List::class.java, clazz).type return Gson().fromJson(json, type) } // 使用 val json = """[{"name":"John","age":30}]""" val users = parseList(json, User::class.java) println(users[0].name) // 错误:java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to User ``` 我尝试了很多方法:试图传递 `TypeToken`,使用 `reified`,但结果仍然得到 `LinkedTreeMap` 而不是我的类型。我知道这是因为