Функциональных программисты научили нас неизменность über Alles и, таким образом, чтобы объявить все поля, как Вал ов кроме вара с. Лично я также хотел бы обеспечить постоянство поля с помощью компилятора. Но как вы инициализируете эти поля во время пользовательской десериализации?Неизменность и пользовательская десериализация в Scala
Я проверил, система десериализации отлично обновить константы
case class S(value: String) extends Serializable {
private def writeObject(out: ObjectOutputStream) = out.defaultWriteObject()
private def readObject(in: ObjectInputStream) {
println("restoring " + this) // restoring S(null)
in.defaultReadObject()
println("restored to " + this) // restored S(string 1)
}
}
, тогда как я не могу ручное ее закрытие сделать то же самое
case class I(value: Int) extends Serializable {
private def readObject(in: ObjectInputStream) {
value = in.readInt() // compilation error "reassignment to val"
}
}
Если вам нужно настроить сериализацию java по умолчанию, вы, вероятно, должны сделать сериализуемый конструктор. Концепция Builder является общей для ООП и FP и может служить мостом. – Odomontois