如何在Clojure中动态查找静态类成员?

Chr*_*erg 8 java clojure

在Clojure中,我可以查找Java类的静态成员(例如,持有常量的字段),如下所示:

ClassName/CONSTANT_FIELD
Run Code Online (Sandbox Code Playgroud)

当我在运行时只知道它的名字时,如何访问该成员?一个例子是循环一系列字段名称并获取所有字段值.

我想做这样的事情(当然这个代码不起作用):

(let [c "CONSTANT_FIELD"]
  ClassName/c)
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

djp*_*ell 13

您可以使用Java的反射API.

(let [c "CONSTANT_FIELD"]
  (.get (.getField ClassName c) nil))
Run Code Online (Sandbox Code Playgroud)

nil就在那里,因为你得到一个静态字段,而不是特定对象的成员字段.