I am trying to wrap a Java library with a Clojure binding. One particular class in the Java library defines a bunch of static final constants, for example:
class Foo {
public static final int BAR = 0;
public static final int SOME_CONSTANT = 1;
...
}
I had a thought that I might be able to inspect the class and pull these constants into my Clojure namespace without explicitly def
-ing each one.
For example, instead of explicitly wiring it up like this:
(def foo-bar Foo/BAR)
(def foo-some-constant Foo/SOME_CONSTANT)
I'd be able to inspect the Foo
class and dynamically wire up foo-bar
and foo-some-constant
in my Clojure namespace when the module is loaded.
I see two reasons for doing this:
A) Automatically pull in new constants as they are added to the Foo
class. In other words, I wouldn't have to modify my Clojure wrapper in the case that the Java interface added a new constant.
B) I can guarantee the constants follow a more Clojure-esque naming convention
I'm not really sold on doing this, but it seems like a good question to ask to expand my knowledge of Clojure/Java interop.
Thanks
clojure.reflect/reflect
? clojuredocs.org/clojure_core/clojure.reflect/reflect – Pears