警告。这对于 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/