Android 如何向Parcelable类的成员变量添加setter和getter

Android 如何向Parcelable类的成员变量添加setter和getter,android,kotlin,Android,Kotlin,下面是我目前正在学习的一个课程 @Parcelize class Time(var hour:Int, var minute:Int):Comparable<Time>,Parcelable @Parcelize 上课时间(var小时:整数,var分钟:整数):可比,可分包 我想在成员变量小时和分钟中添加一个setter,以便它们保持时间格式。类必须通过intent传递,因此它实现了Parcelable。但是它说一个Parcelable类应该有一个主构造函数,所以我在添加sett

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

@Parcelize
class Time(var hour:Int, var minute:Int):Comparable<Time>,Parcelable
@Parcelize
上课时间(var小时:整数,var分钟:整数):可比,可分包
我想在成员变量小时和分钟中添加一个setter,以便它们保持时间格式。类必须通过intent传递,因此它实现了Parcelable。但是它说一个Parcelable类应该有一个主构造函数,所以我在添加setter时遇到了问题。
谁能告诉我原因和解决办法?多谢各位

Kotlin的属性已经附带了getter和setter。每次您说
time.hour=5
val currentTime=time.hour
-就会调用相应的setter或getter

这里的问题不在于构造函数,而在于parcelable需要的
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)
        }
    }
}
上课时间(变量小时:整数,变量分钟:整数):可比较,可分包{
覆盖包裹(目的地:包裹?,标志:整型){
dest!!.writeInt(小时)
目标写入(分钟)
}
重写有趣的描述内容():Int=0
覆盖乐趣比较(其他:时间):Int{
//你的比较逻辑
}
同伴对象创建者:Parcelable.CREATOR{
覆盖createFromParcel(地块:地块):时间{
返回时间(parcel.readInt(),parcel.readInt())
}
覆盖新数组(大小:Int):数组{
返回阵列fnulls(大小)
}
}
}

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

这里的问题不在于构造函数,而在于parcelable需要的
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)
        }
    }
}
上课时间(变量小时:整数,变量分钟:整数):可比较,可分包{
覆盖包裹(目的地:包裹?,标志:整型){
dest!!.writeInt(小时)
目标写入(分钟)
}
重写有趣的描述内容():Int=0
覆盖乐趣比较(其他:时间):Int{
//你的比较逻辑
}
同伴对象创建者:Parcelable.CREATOR{
覆盖createFromParcel(地块:地块):时间{
返回时间(parcel.readInt(),parcel.readInt())
}
覆盖新数组(大小:Int):数组{
返回阵列fnulls(大小)
}
}
}

使其成为数据类我不熟悉kotlin,但到底是什么阻碍了您编写自定义方法?@Rafelt自定义方法用于什么?使其成为数据类我不熟悉kotlin,但到底是什么阻碍了您编写自定义方法?@Rafelt自定义方法用于什么?我目前正在使用@Parcelize装饰器。我应该重写CREATOR吗?如果您使用
@Parcelize
,那么将此类设置为数据类(
数据类时间(var hour:Int,var minute:Int):可比较的,可打包的就足够了。您如何修改setter?您的意思是用自定义实现重写默认setter?您可以这样做:不建议在数据类中包含处理逻辑,因此我建议使用另一个知道如何解析的对象包装
Time
数据类实例,或者使
Time
不是数据类并自己实现上述方法。我目前正在使用@Parcelize decorator。我应该重写CREATOR吗?如果您使用
@Parcelize
,那么将此类设置为数据类(
数据类时间(var hour:Int,var minute:Int):可比较的,可打包的就足够了。您如何修改setter?您的意思是用自定义实现重写默认setter?您可以这样做:不建议在数据类中包含处理逻辑,因此我建议使用另一个知道如何解析的对象包装
Time
数据类实例,或者使
Time
不是数据类,并自己实现上述方法。