3

ここにある 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))))

あらゆる種類のあらゆる場所でタイプヒントを試しましたが、それでも同じエラーが発生します。

4

2 に答える 2

1

サンプル Java コードでの dynamicLabel の呼び出しは次のようになります。

DynamicLabel.label( "User" )

これは次のように変換されます。

(DynamicLabel/label "user")

label はorg.neo4j.graphdb.DynamicLabelシグネチャを持つクラスの静的メソッドであるため:

 static Label   label(String labelName) 
于 2014-04-10T23:16:38.150 に答える
1

これは、varargs Label... パラメータが原因です。これは私が知らなかったちょっとした Clojure/Java 相互運用性でした: パラメーターを配列として渡す必要があるため (1 つしかない場合でも)、次のようにする必要があります。

(. db (createNode (into-array Label [l])))

それを機能させるために。もう戻れない午後がある!

于 2014-12-15T02:24:42.417 に答える