3

私はプログラミング Clojure を読んでいますが、Stuart の主な Java Interop の例を理解するのに苦労しています。彼は DefaultHandler を拡張し、startElement メソッドを作成してから、そのハンドラーを XML パーサーに渡します。私が理解していないのは、正確に何が起こっているのかです。彼の startElement の実装は、DefaultHandler で定義されたものをオーバーライドしますか? よくわかりません。私は Java の経験がなく、オブジェクト指向の経験もほとんどありません。

ありがとう!

4

2 に答える 2

7

私はその本を所有していませんが、コードを見つけました。あなたが正しいようです。これが機能です(他の人が見ることができます):

(def print-element-handler
  (proxy [DefaultHandler] [] 
   (startElement            
     [uri local qname atts] 
     (println (format "Saw element: %s" qname)))))

あなたはそれが何をするかについて正しいです。プロキシ ステートメントは、次の Java コードと同等の新しいクラスを作成します。

public class SomeNewClass extends DefaultHandler {
    public void startElement(String uri,
                     String localName,
                     String qName,
                     Attributes attributes) {
        System.out.println(*stuff*);
    }
}

したがって、proxy ステートメントはそのクラスを定義し、print-element-handler に保持されるインスタンスを提供します。

于 2009-07-11T02:10:49.657 に答える
1

DefaultHandler の Java ドキュメントをざっと見ると、私自身の質問に答えました。http://java.sun.com/j2se/1.4.2/docs/api/org/xml/sax/helpers/DefaultHandler.html#startElement%28java.lang.String,%20java.lang.String,%20java. lang.String,%20org.xml.sax.Attributes%29

デフォルトでは、何もしません。アプリケーション作成者は、サブクラスでこのメソッドをオーバーライドして、各要素の開始時に特定のアクション (新しいツリー ノードの割り当てやファイルへの出力の書き込みなど) を実行できます。

于 2009-07-11T02:06:07.463 に答える