Kotlin数组类型和类文字
我想用GSON反序列化JSON对象的数组。 所以简单的电话:
val arrayOfFoo = gson.fromJson(source, Array<Foo<*>>::class.java>)
应该做的伎俩。 但是类型擦除告诉我们,Foo <*>在运行时不存在,所以弹出一个错误“只有类文字被允许在类文字的左边”。 那么,解决方案必须是:
val arrayOfFoo = gson.fromJson<Array<Foo<*>>>(source, Array::class.java)
不幸的是,现在的Kotlin编译器魔术 – 将Wrapper类型的数组转换为原始数组 – 不知道该怎么做,并告诉我们:“数组类需要类类型,请在尖括号中指定一个类型”。
但是,等一下:这是,第二个之前什么都不行。 运用
Array<Foo>::class.java
也不起作用,因为现在编译器告诉我们:“Foo预计会有一个类型的参数”。
我个人看不出有办法解决这个问题。 是不可能给一个类型的数组的类型,它的类型也需要一个类型参数?
基本问题:您需要指定数组的类型。 这是使用Gson中的TypeToken
完成的。
我希望这有帮助:
val listType = object : TypeToken<Array<String>>() {}.type val json = """["1"]""" val yourClassList :Array<String> = Gson().fromJson(json, listType) print(yourClassList)
请注意,对于基元,它更简单: Gson().fromJson(json, IntArray::class.java)
您可以从数组实例中获取数组类,例如其中之一
arrayOf<Foo<*>>()::class.java java.lang.reflect.Array.newInstance(Foo::class.java, 0)::class.java