Как получить "копию" класса дел для использования переопределенного "клона"?
Я полагаю, очевидным решением является вызов .clone.copy
везде, но есть определенные приложения, где звонят .copy
без .clone
может быть опасным или трудным для отладки.
Это, кажется, демонстрирует, что clone
(или переопределенный clone
), не используется copy
:
class Process {
def replicate: Process = {
println("Hello from Process.replicate")
new Process()
}
}
final case class Processes(
process1: Process,
process2: Process
) {
override def clone: Processes = Processes(
process1.replicate, process2.replicate)
}
val origProcesses = Processes(new Process, new Process)
val clonedProcesses = origProcesses.copy(process1 = new Process)
1 ответ
Решение
Вы можете предоставить свой собственный метод копирования:
final case class Processes(
process1: Process,
process2: Process
) {
override def clone: Processes = Processes(
process1.replicate, process2.replicate)
def copy(process1: Process = this.process1.replicate, process2: Process = this.process2.replicate): Processes = Processes(
process1, process2)
}
В этом случае вы не получите "бесплатно" copy
метод, предоставляемый Scala, но вы все равно можете избежать реализации своего собственного equals
, hashCode
и сопутствующий объект apply
, unapply
и т.п.