2013-10-11 47 views
0

在過去,我已經能夠將Clojure字符串解析爲Java靜態成員

==> ((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 libraryreify可以使用(即,不使用其它地方定義的枚舉,而不是創建在飛行RelationshipType多個)。

例如

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

但是,您如何通過使用Clojure代碼之外的java文件中定義的枚舉來實現呢?

回答

1

此枚舉

package hello; 

public enum MyEnum { 

    ONE, TWO; 

} 

的Clojure的下面的代碼片段工作:

(Enum/valueOf hello.MyEnum "ONE")