J H*_*man 2 arrays generics kotlin
我正在尝试使用GSON反序列化JSON对象数组。所以简单的调用:
val arrayOfFoo = gson.fromJson(source, Array<Foo<*>>::class.java>)
Run Code Online (Sandbox Code Playgroud)
应该可以。但是类型擦除告诉我们,Foo <*>在运行时不存在,因此会弹出错误“仅在类文字的左侧允许类文字”。好吧,所以解决方案必须是:
val arrayOfFoo = gson.fromJson<Array<Foo<*>>>(source, Array::class.java)
Run Code Online (Sandbox Code Playgroud)
不幸的是,现在Kotlin编译器的魔力-将Wrapper类型的数组转换为原始数组-无法确定该做什么并告诉我们:“数组类文字需要一个类类型。请在尖括号中指定一个”。
但是,请稍等:这是第二天没有起作用的东西。使用
Array<Foo>::class.java
Run Code Online (Sandbox Code Playgroud)
也不起作用,因为现在编译器告诉我们:“ Foo需要一个类型参数”。
我个人看不到解决该问题的方法。是否不可能给出类型数组的类文字,而该类型也需要类型参数?
您可以从数组实例中获取数组类,例如,
arrayOf<Foo<*>>()::class.java
java.lang.reflect.Array.newInstance(Foo::class.java, 0)::class.java
Run Code Online (Sandbox Code Playgroud)
基本问题:您需要指定数组的类型。这是使用TypeTokenGson 完成的。
我希望这有帮助:
val listType = object : TypeToken<Array<String>>() {}.type
val json = """["1"]"""
val yourClassList :Array<String> = Gson().fromJson(json, listType)
print(yourClassList)
Run Code Online (Sandbox Code Playgroud)
请注意,对于原语,它更简单:Gson().fromJson(json, IntArray::class.java)
| 归档时间: |
|
| 查看次数: |
1656 次 |
| 最近记录: |