首页 文章

Kotlin数组类型和类文字

提问于
浏览
2

我试图用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需要一个类型的参数” .

我个人无法找到解决这个问题的方法 . 是否不可能给出类型数组的类文字,类型也需要类型参数?

2 回答

  • 4

    基本问题:您需要指定数组的类型 . 这是在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)

  • 3

    您可以从数组实例中获取数组类,例如,其中一个

    arrayOf<Foo<*>>()::class.java
    java.lang.reflect.Array.newInstance(Foo::class.java, 0)::class.java
    

相关问题