代码之家  ›  专栏  ›  技术社区  ›  Christian Berg

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

  •  8
  • Christian Berg  · 技术社区  · 15 年前

    在Culjule中,我可以查找一个Java类的静态成员(例如一个保持常数的字段):

    ClassName/CONSTANT_FIELD
    

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

    我想这样做(当然,这段代码不起作用):

    (let [c "CONSTANT_FIELD"]
      ClassName/c)
    

    最好的方法是什么?

    1 回复  |  直到 15 年前
        1
  •  13
  •   djpowell    15 年前

    可以使用Java的反射API。

    (let [c "CONSTANT_FIELD"]
      (.get (.getField ClassName c) nil))
    

    零存在是因为您得到的是一个静态字段,而不是一个特定对象的成员字段。