【发布时间】:2016-04-20 00:37:56
【问题描述】:
在我的 Kotlin Android 项目中,我创建了一个扩展 Serializable 的 FileItem 类
class FileItem(<parameters>) : Serializable, Comparable<FileItem> {
所以我需要将这个类的实例序列化为一个 Bundle
val arguments:Bundle = Bundle()
arguments.putSerializable("folders", folders as Serializable)
文件夹被声明为:
folders:Array<FileItem> (method parameter)
上面的序列化代码编译没有任何警告。同时,当我需要反序列化文件夹项目时,问题就来了:
val arguments: Bundle? = getArguments()
if (arguments != null){
foldersItems = arguments.getSerializable("folders") as Array<FileItem>
foldersItems 声明为
var foldersItems: Array<FileItem>?
我收到以下警告,我无法解决没有 suppress_warning 注释:
w: <Path to my class>: (78, 28): Unchecked cast: java.io.Serializable! to kotlin.Array<com.loloof64.android.chess_positions_archiver.main_file_explorer.FileItem>
这种代码在 Java/Groovy 中编译时没有警告(folderItems 是 FileItem[]),那么如何修改 kotlin 代码以使编译器“满意”?
我注意到in official Kotlin documentation Kotlin Array 没有扩展 Serializable 并且不开放继承。是否可以通过某种扩展方法“添加”它?
【问题讨论】:
-
数组序列化在 Kotlin 中也是可以序列化的。这个 sn-p 显示它:gist.github.com/h0tk3y/bc892327ab239121e76df645d32d9832。我不知道为什么引用没有说明它,可能是因为
Array<SomeType>被编译成Java的SomeType[],它肯定是可序列化的。
标签: arrays serialization kotlin