使用@Parcelize,但通过删除Kotlin中的Getter和Setters

问题描述

我试图使用@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().

希望这将对任何人都有帮助,最好的方法也将受到欢迎。