是否可以使用函数文字序列化Kotlin Data类?

时间:2018-10-16 14:36:00

标签: android serialization kotlin

我有以下设置:

Kotlin数据类:

data class Error(val throwable: Throwable, val reloadAction: (() -> Unit)? = null) : Serializable

类的初始化:

val instance = Error(throwable,this::loadData)

其中this是Android体系结构组件中的ViewModel

当我将此数据类传递给可打包时:

parcel.writeSerializable(instance as Serializable)

我收到以下异常:

java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.mypackagename.Error)
        at android.os.Parcel.writeSerializable(Parcel.java:1468)
        at com.mypackagename.CustomView$Companion$SavedState.writeToParcel(CustomView.kt:177)
...
Caused by: java.io.NotSerializableException: com.mypackagename.ExampleViewModel

在此问题中:Is there a way to pass a function reference between activities?在回答以下问题:

  

如果它是函数引用(SomeClass :: someFunction)或lambda,它将实际上是可序列化的。但是,如果它是功能接口()-> Unit的某种自定义实现,则可能不是,所以您应该检查一下并处理不存在的情况。

这是我的情况吗?还是当函数是不可序列化对象(ViewModel)的函数时,数据类无法序列化?还有其他可能性如何在数据类内部将函数文字传递为Serializable吗?

2 个答案:

答案 0 :(得分:3)

问题出在视图模型上:com.mypackagename.ExampleViewModel。此类不可序列化。

如果使用函数引用,则目标对象(在这种情况下为视图模型)也必须可序列化。

答案 1 :(得分:0)

我有类似的问题,我的问题是我不希望默认情况下数据类不能序列化。重要的是不要忘记实现Serializable接口。