Кто-нибудь знает, почему эта сериализация иерархии классов приводит к пустому объекту?
abstract class Notation<T>: Comparable<T> where T: Serializable, T: Cloneable {
var id: Long = 0L
var aggregationId: String = ""
var startTime: Calendar = GregorianCalendar.getInstance().apply { clear() }
var endTime: Calendar = GregorianCalendar.getInstance().apply { clear() }
override fun toString(): String
= "\tid: $id,\n" +
"\taggregationId: $aggregationId,\n" +
"\tstartTime: $startTime,\n" +
"\tendTime: $endTime"
}
abstract class LaborNotation<T>: Notation<T>(), Comparable<T> where T: Serializable, T: Cloneable {
var laborId: Long = 0L
var name: String = ""
override fun toString(): String
= "${super.toString()},\n" +
"\tlaborId: $laborId,\n" +
"\tname: $name"
}
class ComponentCrewNotation: LaborNotation<ComponentCrewNotation>(), Serializable, Cloneable {
override fun compareTo(other: ComponentCrewNotation): Int = toString().compareTo(other.toString())
override fun toString(): String = "{\n${super.toString()}\n}"
public override fun clone(): Any {
return super.clone()
}
}
Когда я пытаюсь передать ComponentCrewNotation
в Intent::extra
другому действию, когда я вызываю Intent::getSerializableExtra()
это приводит к очистке ComponentCrewNotation
.
. Чтобы решить эту проблему, я сделал следующий обходной путь: $
class ComponentCrewNotation: LaborNotation<ComponentCrewNotation>(), Serializable, Cloneable {
override var id: Long = super.id
override var aggregationId: String = super.aggregationId
override var startTime: Calendar = super.startTime
override var endTime: Calendar = super.endTime
override var laborId: Long = super.laborId
override var name: String = super.name
override fun compareTo(other: ComponentCrewNotation): Int = toString().compareTo(other.toString())
override fun toString(): String = "{\n${super.toString()}\n}"
public override fun clone(): Any {
return super.clone()
}
}
Существует лучший способ сериализации этого объекта без необходимостипереопределить каждое поле?
Спасибо !!!