Java 如何创建支持深度复制的深度嵌套数据模型?
我正在将一个2D图形引擎从Swift移植到Kotlin。数据模型的大部分是Swift中的嵌套结构。举个简单的例子:Java 如何创建支持深度复制的深度嵌套数据模型?,java,kotlin,functional-programming,deep-copy,Java,Kotlin,Functional Programming,Deep Copy,我正在将一个2D图形引擎从Swift移植到Kotlin。数据模型的大部分是Swift中的嵌套结构。举个简单的例子: struct Point { var x: Float var y: Float } struct Size { var width: Float var height: Float } struct Rect { var origin: Point var size: Size } 许多模型结构嵌套得很深,层次比这里多得多。此外,由于我们对大多数类型
struct Point {
var x: Float
var y: Float
}
struct Size {
var width: Float
var height: Float
}
struct Rect {
var origin: Point
var size: Size
}
许多模型结构嵌套得很深,层次比这里多得多。此外,由于我们对大多数类型使用struct
s而不是class
es,这些类型都是Swift中的值类型,因此我们可以轻松地将纯函数用于二维操作,如下面这个小的人为示例:
func translate(rect1: Rect, dx: Float) -> Rect {
var rect2 = rect1 // Creates a mutable deep copy
rect2.origin.x += dx
return rect2
}
这种方法为我们提供了高性能、无内存处理问题(所有内容都存在于堆栈中)和良好的可测试性。由于struct
s是值类型的,我们不能意外地创建浅拷贝并修改错误的对象
在Kotlin中创建这样一个模型的惯用方法是什么
看起来Kotlin的数据类是一个解决方案,但我不知道复制深度嵌套的数据类通常是如何完成的。您是否到处创建自定义的deepCopy()方法
如果一个copy()/deepCopy()方法的调用触发了另一个copy()/deepCopy()调用模型的洪流,我应该担心性能吗?(从C程序员的角度来看,我看到堆上有数千个小的、短期的分配)