Estoy intentando envolver una biblioteca Java con un enlace Clojure. Una clase particular en la biblioteca de Java define un grupo de constantes finales estáticas, por ejemplo:¿Cómo se obtienen las constantes `static final` de una clase Java en un espacio de nombre Clojure?
class Foo {
public static final int BAR = 0;
public static final int SOME_CONSTANT = 1;
...
}
tuve un pensamiento que podría ser capaz de inspeccionar la clase y tirar de estas constantes en mi espacio de nombres Clojure sin explícitamente def
- ing cada uno.
Por ejemplo, en lugar de cableado explícitamente de esta manera:
(def foo-bar Foo/BAR)
(def foo-some-constant Foo/SOME_CONSTANT)
me gustaría ser capaz de inspeccionar la clase Foo
y dinámicamente cablear foo-bar
y foo-some-constant
en mi espacio de nombres Clojure cuando se carga el módulo.
Veo dos razones para hacer esto:
A) Obtener automáticamente en nuevas constantes a medida que se agregan a la clase Foo
. En otras palabras, no tendría que modificar mi envoltorio Clojure en el caso de que la interfaz Java agregara una nueva constante.
B) Puedo garantizar las constantes siguen una convención de nombres más Clojure-esque
Realmente no estoy vendido en hacer esto, pero parece que una buena pregunta para ampliar mis conocimientos de Clojure/Java interoperacion
Gracias
¿Existe quizás una solución más concisa y completa que use 'clojure.reflect/reflect'? http://clojuredocs.org/clojure_core/clojure.reflect/reflect – noahlz