按值而非引用将对象属性复制到映射

2024-01-03

我不确定哪里出了问题,但似乎我无法从对象实例复制属性并将它们分配给映射,而在保存实例后不更改值。

这是一个示例类:

class Product {
    String productName
    String proudctDescription
    int quantityOnHand
}

提交表单并将其发送到我的控制器后,我可以访问这些值并从productInstance.properties从实例中可用的地图。我想将属性复制到另一个地图以在编辑期间提交它们之前保留这些值。假设我们正在编辑一条记录,这些是存储在数据库中的值:productName = "My Product", productDescription = "My Product Description" and quantityOnHand = 100.

我想将它们复制到:

def propertiesBefore = productInstance.properties

这不起作用,因为当我保存 ProductInstance 时,属性 Before 中的值更改为实例所具有的值。

所以我尝试了这个:

productInstance.properties.each { k,v -> propertiesBefore[k] = v }

同样的事情又发生了。我不确定如何按值复制,似乎无论我尝试什么,它都会按引用复制。

EDIT

根据 Pawel P. 的要求,这是我测试的代码:

class Product {
    String productName
    String productDescription
    int quantityOnHand
}

def productInstance = new Product(productName: "Some name", productDescription: "Desciption", quantityOnHand: 10)

def propertiesBefore = [:]
productInstance.properties.each { k,v -> propertiesBefore[k] = (v instanceof Cloneable) ? v.clone() : v }

productInstance.productName = "x"
productInstance.productDescription = "y"
productInstance.quantityOnHand = 9

println propertiesBefore.quantityOnHand // this will print the same as the one after the save() 
productInstance.save(flush:true)    
println propertiesBefore.quantityOnHand // this will print the same as the one above the save()

如果不进行克隆,也可以通过“推”第一个值来将 hash-map [:] 的值复制到新的 hash-map [:] 的空间中,这将达到您想要的相同结果(复制价值)!

def APE = [:]
APE= [tail: 1, body: "hairy", hungry: "VERY!!!"]

def CAVEMAN = [:]
CAVEMAN << APE  //push APE to CAVEMAN's space

//modify APE's values for CAVEMAN
CAVEMAN.tail = 0
CAVEMAN.body = "need clothes"

println "'APE': ${APE}"
println "'CAVEMAN': ${CAVEMAN}"

输出==>

'APE': [tail:1, body:hairy, hungry:VERY!!!]
'CAVEMAN': [tail:0, body:need clothes, hungry:VERY!!!]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按值而非引用将对象属性复制到映射 的相关文章

  • Jenkins 共享库 - 从 /vars 中的 /src 文件夹导入类

    我正在尝试为我的 CI 流程编写一个 Jenkins 共享库 我想引用一个类 src定义在全局函数内的文件夹 vars文件夹 因为它允许我将大部分逻辑放在类中而不是全局函数中 我遵循 Jenkins 官方文档中记录的存储库结构 Jenkin
  • Grails 2.3.0 自动重新加载不起作用

    我最近将我们的项目升级到 grails 2 3 0 一切工作正常 除了每当我更改代码时自动重新加载都无法工作的问题 这包括所有项目工件 控制器 域 服务 gsps css 和 javascript 文件 我的旧版本 grails 可以正常工
  • 使用 JQuery 的 Grails 项目,无需插件

    我正在尝试设置一个简单的 Grails 2 1 1 应用程序 该应用程序将使用 JQuery 我有一个名为 TestController 的控制器和一个位于正确位置的index gsp 我手动添加 JQuery 库 没有使用 Grails
  • 我如何(或者应该?)从 Grails 中的 SiteMesh 模板 (views/layouts/main.gsp) 访问服务层?

    我需要在我正在构建的网站的页脚中创建一个顶部列表 页脚是在默认的 SiteMesh 布局模板中创建的 views layouts main gsp 为了创建顶部列表 需要访问数据库 因此我将创建顶部列表所需的所有逻辑封装在服务类中 serv
  • 模块化大型 Grails 应用程序的最佳实践?

    我正在开发的 Grails 应用程序变得相当大 最好将其重构为几个模块 这样我们就不必每次都重新部署整个事情 将 Grails 应用程序拆分为多个模块的最佳实践是什么 特别是 我想创建一个域类 相关服务的包 并将其作为模块在应用程序中使用
  • 如何使用 Groovy 获取自上次成功构建以来 Jenkins 的提交信息?

    如何编写自定义 groovy 脚本以轻松操作自上次成功构建以来所有提交的数据 在 gradle maven 步骤之后添加新的构建步骤 gt 执行系统 groovy 脚本 适配代码 import com tikal jenkins plugi
  • 如何在GEB中选择内部元素的文本?

    我有以下场景 div ul class select2 results style width 400px li class select2 results dept 0 select2 result select2 result sele
  • 如何检测 URL 映射中的片段标识符?

    In a Grails http www grails org 项目我正在尝试根据是否存在来映射 Url片段标识符 http en wikipedia org wiki Fragment identifier 片段标识符不是 URL 的一部
  • 如何在我的应用程序中取消授权/撤销 LinkedIn 令牌

    我有一个 grails 应用程序 我希望用户授予我访问他 她的 LinkedIn 帐户的权限 以获取信息并以不同的方式显示信息 我能够执行以下操作 获取授权码 使用该授权码获取访问令牌 我将该访问令牌与到期日期一起存储在我的用户实体中 当过
  • 将所有构造函数参数作为实例属性添加到 PyCharm 中的类中

    我正在使用 PyCharm 我开始定义一个类 class A def init self a b c 我希望它看起来像这样 class A def init self a b c self a a self b b self c c 使用
  • 根据环境执行特定的Geb测试

    我正在 Grails 项目中执行一组规范测试 当我在本地时 我需要执行一组特定的规范 当我运行预生产环境时 我需要执行另一组规范 我当前的配置正在同时执行两个环境的所有规范 这是我想避免的 我有多个环境 已在 GebConfig 中配置 e
  • 以无法破坏的方式限制表中允许的记录数量

    我们有一个 Web 应用程序 Grails 我们将根据用户数量为其出售许可证 数据库 Oracle 10g 中有一个表保存用户 客户将托管自己的软件和数据库副本 有人可以建议一些策略来限制允许存在于用户表中的记录数量 从而使客户无法合理地破
  • 在 gradle-5.1.1 中用什么代替 TaskInternalexecute() ?

    我的自定义任务位于gradle 4 10 1 task fabricUploadApkDevelop group fabric dependsOn assembleDevDebug doLast fabric gradle task ass
  • 本地 401 工作,临时服务器得到 302

    我可能不会获得帮助第一次尝试所需的所有信息 但我会尽我所能 并在我们进行过程中对其进行编辑 我有一个使用 Spring Security Core 插件的 Grails 1 3 7 应用程序 我正在编写处理会话超时和 ajax 请求的代码
  • 需要正则表达式帮助

    我正在尝试替换两次或多次出现的 br like br br br 标签与两个一起 br br 具有以下模式 Pattern brTagPattern Pattern compile lt s br s s gt s 2 Pattern CA
  • 如何为新任务类型扩展 Gradle 任务的行为?

    我想为一些测试任务设置一些东西 更具体地说 我想添加一些环境变量和一些系统属性 也许还有一些其他内容 例如 依赖项 或 workingDir 与常规的Test任务我可以做到这一点 task test1 type Test dependsOn
  • 未找到 Gradle DSL 方法:“exclude()”

    我正在 Android Studio 中工作 当我在 build gradle 文件中添加该行时 dependencies compile files libs poi ooxml schemas 3 12 20150511 a jar e
  • 如何使用 JPA 和 Hibernate 修复 StaleObjectStateException

    控制器逻辑 def updateObject Object o Object get params id as Long o otherObjects clear objectDataService saveObject o id Othe
  • Grails(现在)值得吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我知道这是一个复制 https stackoverflow com questions 397228 is grails worth it然而
  • 在 Grails 控制台中导入服务?

    如何获取 grails 控制台中的服务 我的业务规则是在服务中实现的 但我无法在 grails 控制台中访问它们 有谁知道如何帮助我 春天ApplicationContext可用为ctx控制台中的变量 您可以使用它来访问 Spring be

随机推荐