问题描述
我试图使用@Parcelize忽略kotlin中的getter和setter方法。但是,这里有些困惑。
class College : Parcelable {
var studentFound = true
set(value) {
field = value
studentFoundEvents.onNext(value)
}
val studentFoundEvents = PublishSubject.create<Boolean>()
var sNumber: String? = null
var sLevel: String? = null
var course: Course? = null
set(value) {
field = value
cName = null
cId = null
cProf = null
}
}
和我分别有 constructor(来源:包裹){} ,覆盖有趣的writetoParcel(目的地:Parcel ?、标志:Int){} 和覆盖fun describeContents():Int = hashCode()。
我想将整个Parcelable转换为@Parcelize。 这是我尝试过的,但没有锻炼。
@Parcelize
data class College(
var studentFound = true,val studentFoundEvents = PublishSubject.create<Boolean>(),// does not work here
var sNumber: String? = null,var sLevel: String? = null,var course: Course? = null
) : Parcelable
这里缺少什么吗?预先感谢。
解决方法
我花了几个小时研究@Parcelize,不知道这是否是最好的方法。如果您有最佳解决方案,请始终强烈推荐任何人。
@Parcelize
class College : Parcelable {
var studentFound = true
set(value) {
field = value
studentFoundEvents.onNext(value)
}
val studentFoundEvents = PublishSubject.create<Boolean>()
var sNumber: String? = null
var sLevel: String? = null
var course: Course? = null
set(value) {
field = value
cName = null
cId = null
cProf = null
}
}
添加 @Parcelize ,但不将属性移至构造函数并删除这些内容
constructor(source: Parcel) {},override fun writeToParcel(dest: Parcel?,flags: Int) {} and
override fun describeContents(): Int = hashCode().
希望这将对任何人都有帮助,最好的方法也将受到欢迎。