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