在Clojure中为嵌入Neo4j的标签铸造DynamicLabel
我正试图重写clojure中的neo4j示例代码。但是当我尝试创建一个节点时,我得到了以下错误在Clojure中为嵌入Neo4j的标签铸造DynamicLabel,clojure,neo4j,clojure-java-interop,Clojure,Neo4j,Clojure Java Interop,我正试图重写clojure中的neo4j示例代码。但是当我尝试创建一个节点时,我得到了以下错误 ClassCastException Cannot cast org.neo4j.graphdb.DynamicLabel to [Lorg.neo4j.graphdb.Label; java.lang.Class.cast (Class.java:3094) 这是我的密码: (ns neotest.handler (:import (org.neo4j.graphdb
ClassCastException Cannot cast org.neo4j.graphdb.DynamicLabel to [Lorg.neo4j.graphdb.Label; java.lang.Class.cast (Class.java:3094)
这是我的密码:
(ns neotest.handler
(:import (org.neo4j.graphdb
DynamicLabel
GraphDatabaseService
Label
Node
ResourceIterator
Transaction
factory.GraphDatabaseFactory
schema.IndexDefinition
schema.Schema)))
(def db
(let [path "C:\\Users\\xxx\\code\\neotest\\resources\\db1"]
(. (new GraphDatabaseFactory) (newEmbeddedDatabase path))))
(defn create-node []
(try (let [tx (. db beginTx)
l (. DynamicLabel (label "User"))]
(. db (createNode l))
(. tx success))))
我在所有地方都尝试过各种类型的类型暗示,但仍然遇到相同的错误。示例java代码中对dynamicLabel的调用如下所示:
DynamicLabel.label( "User" )
这将转化为:
(DynamicLabel/label "user")
因为label是类org.neo4j.graphdb.DynamicLabel
的静态方法,该类具有以下签名:
static Label label(String labelName)
这是因为varargs标签。。。参数这是我不知道的Clojure/Java互操作:必须将参数作为数组传入(即使只有一个数组),因此需要执行以下操作:
(. db (createNode (into-array Label [l])))
让它工作。还有一个下午我不会回来了 我认为这是createNode()的varargs参数这也发生在我身上。我认为这是一只虫子。当Clojure将函数转换为方法调用时,它会将参数类型化为方法签名中定义的类型。这类事情通常是一个类加载器问题:例如,标签接口Clojure将DynamicLabel转换为的不是“正确”的。到目前为止,我刚刚开始尝试调试,但没有成功。