【发布时间】:2012-01-11 15:42:12
【问题描述】:
警告。对于 Groovy,这完全是一个新手问题。我来自 Java 背景,我不想那样做,除非我必须这样做。
我想创建一个映射,以便在另一个对象图之间轻松遍历一个对象图。
喜欢:
customer.contact.address.identifier = incomingContact.location.address.idCode
上述两种对象结构完全不同,有时具有不同的数据类型。在上面的 sn-p 中,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;
}
上面的sn-p本身就有复杂性和问题。一方面,当我想将调用结构设置回一个空对象,但它是一个“长”对象时,它会出错。
直接错误是:
groovy.lang.MissingMethodException:没有方法签名:customer.contact.address.setIdentifier() 适用于参数类型:(null) 值:[null]
我的替代想法是使用映射工具,例如:http://dozer.sourceforge.net/ 并允许它处理两个图的遍历,但它又是 java,我想要那种 groovy 动态类型的解决方案。
【问题讨论】:
-
您是否有某种伪代码或某些东西可以更清楚地解释您想要的内容?
-
已更新,希望它有助于理解我的 java 到 groovy 的困惑。我可以很容易地找到 java 反射方式,比如 apache commons,但我正在学习 groovy。谢谢..
-
你上面的代码没有多大意义,它总是会返回一个非空的
fromObject,即使它的类型不是Long(方法的声明返回类型)