La cosa más simple que puedo pensar es envolverlo en una función, pero no estoy del todo seguro de si este es el mejor/manera más idiomática:
user> (apply (fn [a b] (Integer/rotateRight a b)) [0 0])
0
O, un poco más corto, pero equivalentes:
user> (apply #(Integer/rotateRight %1 %2) [0 0])
0
Como alternativa, puede crear una función de contenedor correcto para su llamada al método java:
(defn rotate-right [a b]
(Integer/rotateRight a b))
debería usar este modo:
user> (apply rotate-right [0 0])
0
edición: sólo por diversión, inspirado por el comentario de iradik sobre efficieny, comparaciones en el tiempo entre tres maneras diferentes de llamar a este método:
;; direct method call (x 1 million)
user> (time (dorun (repeatedly 1E6 #(Integer/rotateRight 2 3))))
"Elapsed time: 441.326 msecs"
nil
;; method call inside function (x 1 million)
user> (time (dorun (repeatedly 1E6 #((fn [a b] (Integer/rotateRight a b)) 2 3))))
"Elapsed time: 451.749 msecs"
nil
;; method call in function using apply (x 1 million)
user> (time (dorun (repeatedly 1E6 #(apply (fn [a b] (Integer/rotateRight a b)) [2 3]))))
"Elapsed time: 609.556 msecs"
nil
Interesante: planea incorporar la generación de envoltura de método automático con un futuro compilador de Clojure reescribir http://dev.clojure.org/display/design/Better+method+inference – Ambrose