0

在过去,我已经能够,例如

==> ((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)))))返回零。

更新:

我从另一个reify可以使用的库中看到(即,使用在其他地方定义的枚举,而是动态创建RelationshipTypes)。

例如

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

但是如何通过使用 Clojure 代码之外的 java 文件中定义的枚举来做到这一点?

4

1 回答 1

1

对于这个枚举

package hello;

public enum MyEnum {

    ONE, TWO;

}

Clojure 的以下代码片段有效:

(Enum/valueOf hello.MyEnum "ONE")
于 2013-10-11T16:56:41.273 回答