我正在尝试建立一个将任何对象保存到文件中的类,但我无法弄清楚自己在做什么错。
基本上,我有2个函数来对内容进行序列化和反序列化,如下所示:
conversation-driver
到目前为止,这在很多情况下都有效,例如以inline fun <reified T> writeInCache(content: T, file: File) {
val stream = ObjectOutputStream(FileOutputStream(file))
stream.writeObject(Gson().toJson(content, object : TypeToken<T>() {}.type))
stream.close()
}
inline fun <reified T> readFromCache(file: File): T? {
val stream = ObjectInputStream(FileInputStream(file))
val streamObject= stream.readObject() as String
stream.close()
return Gson().fromJson(streamObject, object : TypeToken<T>() {}.type) as? T
}
或MyClass
作为内容。
但是当我尝试发送List<MyClass>
类型的内容时,会发生一些非常奇怪的事情。
List<List<MyClass>>
在val list: List<List<MyClass>> = readFromCache(file) ?: emptyList()
内,正确读取了泛型的类(readFromCache
),该函数返回了一个值,但是当我尝试访问它时(java.util.List<? extends java.util.List<? extends com.project.entity.MyClass>>
应该是类型MyClass)我得到了classCastException:
ava.lang.ClassCastException:com.google.gson.internal.LinkedTreeMap无法转换为com.project.entity.MyClass
我不理解为什么它不能正确反序列化,因为该类型似乎是已知的,而且我尤其不明白为什么此时会发生异常,而不是在强制转换内容的函数list.first().first()
上发生异常进入所需的类型。
我在堆栈上查看了所有类似的问题,但是似乎没有什么可以解决我的问题。