grails - 在 Groovy 中轻松设置和获取对象结构之间的数据

标签 grails groovy

警告。这对于 Groovy 来说是一个完全的新手问题。我来自 Java 背景,我不想那样做,除非我必须这样做。

我想创建一个映射,该映射将在另一个对象图之间轻松遍历一个对象图。

像:

customer.contact.address.identifier = incomingContact.location.address.idCode

上述两种对象结构完全不同,有时具有不同的数据类型。在上面的代码片段中,identifier 是 Long,idCode 是 String。此外,有些对象是空的,所以我想动态创建结构。

如何通过 groovy 的闭包特性和更多函数式编程来更好地做到这一点?

我最初在考虑继承或反射解决方案,以尽量减少 if/else 条件和基于实例的编程。

有什么想法吗。

这是我开始的一些伪代码,它已经带有 java 的味道:

方法调用:
customer.contact.address.identifier = convert(incomingContact.location.address.idCode)

这是方法:
Long convert(Object fromObject) {

    //example usage that were prototyping for this method (generically)    
    //fromObject = Long.valueOf(5);
    println "convert has: [" + fromObject + "]"
    if(fromObject != null) {

      return fromObject;
    }

    return null;
 }

上面的代码片段本身就具有复杂性和问题。一方面,当我想将调用结构设置回一个空对象时,它会出错,但是一个“长”。

直接错误是:

groovy.lang.MissingMethodException:没有方法签名:customer.contact.address.setIdentifier() 适用于参数类型:(null) 值:[null]

我的另一种想法是使用映射工具,例如:http://dozer.sourceforge.net/并允许它处理两个图的遍历,但它又是 java,我想要那个 groovy 动态类型的解决方案。

最佳答案

如果您只是想将属性从一个对象绑定(bind)到另一个对象,Groovy 的功能对您帮助不大。像 Dozer也许值得一瞧。

顺便说一句,这是编写上面代码的 Groovier 方法:

Long convert(fromObject) {

  println "convert has: [" + fromObject + "]"
  fromObject as Long
}

关于grails - 在 Groovy 中轻松设置和获取对象结构之间的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359240/

相关文章:

grails - 如何在Word文档中添加图像并使用Grails下载?

grails - 在 grails 应用程序中安装 spring 安全插件

groovy - 最近发布的 JDK 7 包括 InvokeDynamic 特性。它是否加速(并实际被 Groovy、Scala、Clojure、JR​​uby、Jython 等所使用)?

java - 如何修剪通过使用 Java 反射获得的同一方法的变体?

grails - 为什么我会收到 javax.net.ssl.SSLPeerUnverifiedException : peer not authenticated only in production?

Grails Facebook 注册/登录

mysql - Grails 2.3.11 MySql 断开连接

grails - Grails拒绝值[null]

java - Gradle找不到tools.jar

groovy - groovy中 ".@ "有什么用?