Попробуйте использовать сеттеры - но если у вас нет выбора и вам действительно нужно это разложить, такой макрос подойдет:
(defmacro set-all [object & fields-and-values]
(let [obj-sym (gensym)]
`(let [~obj-sym ~object]
~@(for [[field value] (partition 2 fields-and-values)]
`(set! (. ~obj-sym ~field)
~value)))))
Генсим необходим в том случае, если выражение, дающее объект, имеет какие-либо побочные эффекты.
Пример использования:
user> (def p (java.awt.Point.))
#'user/p
user> (set-all p x 4 y 5)
5
user> p
#<Point java.awt.Point[x=4,y=5]>