kotlin-android java.io.Сериализуемый абстрактный класс не сериализуется - PullRequest
0 голосов
/ 04 июля 2019

Кто-нибудь знает, почему эта сериализация иерархии классов приводит к пустому объекту?

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()
    }
}

Существует лучший способ сериализации этого объекта без необходимостипереопределить каждое поле?

Спасибо !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...