过去我曾经能够,例如
==> ((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文件中定义的枚举来实现呢?
答案 0 :(得分:1)
这个枚举
package hello;
public enum MyEnum {
ONE, TWO;
}
以下Clojure片段的作品:
(Enum/valueOf hello.MyEnum "ONE")