Внимание. Это общий вопрос для новичка в Groovy ... Я из Java, и я не хочу этого делать, если не обязан.
Я хотел бы создать отображение, которое будет легко проходить один граф объекта между другим графом объекта.
как:
customer.contact.address.identifier = incomingContact.location.address.idCode
Обе вышеперечисленные структуры объектов совершенно разные, иногда с разными типами данных. В приведенном выше фрагменте идентификатор представляет собой 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;
}
Приведенный выше фрагмент имеет сложность и проблемы сам по себе. С одной стороны, он выдает ошибку, когда я хочу вернуть вызывающей структуре нулевой объект, но "Long".
Непосредственная ошибка:
groovy.lang.MissingMethodException: Нет сигнатуры метода: customer.contact.address.setIdentifier () применим для типов аргументов: (ноль) значения: [ноль]
Моя альтернативная мысль - использовать инструмент отображения, такой как: http://dozer.sourceforge.net/ и позволить ему обрабатывать обход обоих графиков, но это снова java, что я и хотел, чтобы это отличное решение с динамическим типом.