如何将Setter和Getter添加到Parcelable类的成员变量

时间:2018-11-27 12:29:08

标签: android kotlin

下面是我目前正在学习的课程

@Parcelize
class Time(var hour:Int, var minute:Int):Comparable<Time>,Parcelable

我想向成员变量hour和minutes添加一个setter,以便它们保持时间格式。并且该类必须通过意图传递,因此它实现了Parcelable。但是它说一个Parcelable类应该有一个主构造函数,所以我在添加setter时遇到了问题。 谁能告诉我原因和解决方案?谢谢。

1 个答案:

答案 0 :(得分:2)

Kotlin的属性已经随getter和setter一起提供。每当您说出time.hour = 5val currentTime = time.hour时-会调用相应的setter或getter

这里的问题不在于构造函数,而在于可打包的CREATOR

完整的示例如下:

class Time(var hour: Int, var minute: Int) : Comparable<Time>, Parcelable {

    override fun writeToParcel(dest: Parcel?, flags: Int) {
        dest!!.writeInt(hour)
        dest.writeInt(minute)
    }

    override fun describeContents(): Int = 0

    override fun compareTo(other: Time): Int {
        // your comparsion logic
    }

    companion object CREATOR : Parcelable.Creator<Time> {
        override fun createFromParcel(parcel: Parcel): Time {
            return Time(parcel.readInt(), parcel.readInt())
        }

        override fun newArray(size: Int): Array<Time?> {
            return arrayOfNulls(size)
        }
    }
}