Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Clojure中为嵌入Neo4j的标签铸造DynamicLabel_Clojure_Neo4j_Clojure Java Interop - Fatal编程技术网

在Clojure中为嵌入Neo4j的标签铸造DynamicLabel

在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

我正试图重写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
            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转换为的不是“正确”的。到目前为止,我刚刚开始尝试调试,但没有成功。