将Clojure字符串解析为Java静态成员

时间:2013-10-11 14:52:40

标签: clojure clojure-java-interop

过去我曾经能够,例如

==> ((resolve (symbol "first")) [1 2 3])
1

但它似乎对Java静态成员的工作方式不同。比如我在自己的文件中有这样的enum

import org.neo4j.graphdb.RelationshipType;

public enum RelTypes implements RelationshipType {
  KNOWS
}

在我的Clojure代码中(使用neo4j)我想:

(defn relate-to
  [from to reltype-as-keyword]
  (.createRelationshipTo from to 
    (resolve (symbol (str "RelTypes/" (.toUpperCase (name reltype-as-keyword)))))))

(resolve (symbol (str "RelTypes/" (.toUpperCase (name reltype-as-keyword)))))返回nil。

更新

我从another library看到可以使用reify(即使用其他地方定义的枚举,而是动态创建RelationshipType

e.g。

(reify RelationshipType
  (^String name [this] "KNOWS"))

但是如何使用Clojure代码之外的java文件中定义的枚举来实现呢?

1 个答案:

答案 0 :(得分:1)

这个枚举

package hello;

public enum MyEnum {

    ONE, TWO;

}

以下Clojure片段的作品:

(Enum/valueOf hello.MyEnum "ONE")