2009-07-11 3 views
2

프로그래밍 Clojure를 통해 읽었으며 Stuarts 기본 Java Interop 예제를 이해하는 데 어려움을 겪고 있습니다. 그는 DefaultHandler를 확장하고 startElement 메서드를 만든 다음 해당 처리기를 XML 파서에 전달합니다. 내가 이해하지 못하는 것은 정확히 무엇이 일어나고 있는지입니다. 그의 startElement 구현은 DefaultHandler에 정의 된 것을 대체합니까? 나는 혼란스러워. 나는 자바에 대한 경험이 없으며 객체 지향에 대해서는 거의 경험이 없다.Clojure에서 Java 클래스를 확장하고 해당 클래스에있는 것과 동일한 이름의 메소드를 정의하면 어떤 일이 발생합니까?

감사합니다.

답변

6

나는이 책을 소유하고 있지 않지만, code을 찾았습니다. 다음은 다른 사람들이 볼 수있는 기능입니다.

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

당신이하는 일은 옳습니다. 프록시 문은 새로운 클래스,이 자바 코드의 equivilent 수 :

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

그래서 프록시 문이 그 클래스를 정의, 그리고 당신이 지금 인쇄 요소 핸들러에서 개최되는 인스턴스를 제공합니다.

+0

내 답변보다 나은 답변을 선택 했으므로 내 답변 만 선택하면 공정하지 않습니다. :) – Rayne

0

Java 설명서를 통해 DefaultHandler를 보면서 내 질문에 대한 답변을 얻을 수 있습니다. 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

기본적으로 아무 것도하지 않습니다. 어플리케이션의 작성자는, 서브 클래스의이 메소드를 오버라이드 (override) 해, 새로운 트리 노드의 할당이나 출력의 파일에의 기입 등, 각 요소의 개시시에 특정의 액션을 취할 수가 있습니다.

관련 문제