Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何创建支持深度复制的深度嵌套数据模型?_Java_Kotlin_Functional Programming_Deep Copy - Fatal编程技术网

Java 如何创建支持深度复制的深度嵌套数据模型?

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 } 许多模型结构嵌套得很深,层次比这里多得多。此外,由于我们对大多数类型

我正在将一个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
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程序员的角度来看,我看到堆上有数千个小的、短期的分配)