我一直在阅读Programming Clojure程序,并且在理解Stuarts主要Java Interop示例时遇到了一些麻烦。他扩展了DefaultHandler,创建了一个startElement方法,然后将该处理程序传递给XML解析器。我不明白的是到底发生了什么。他的startElement实现是否覆盖DefaultHandler中定义的那个?我很困惑。我没有Java方面的经验,也没有面向对象的经验。

谢谢!

最佳答案

我没有这本书,但我找到了code,看来您是对的。这是函数(供其他人查看):

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


您是对的,对的。 proxy语句创建了一个新类,等同于此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中。

10-05 19:00