2012-02-06 11 views
6

¡Nunca me he encontrado con algo así y no conozco este tipo de codificación! ¿Qué es esto? (Soy bastante nuevo en Java)¿Qué tipo de llamada de constructor de Java es esta?

DefaultHandler handler = new DefaultHandler() { 

      boolean bfname = false; 
      boolean blname = false; 
      boolean bnname = false; 
      boolean bsalary = false; 

      public void startElement(String uri, String localName,String qName, 
        Attributes attributes) throws SAXException { 

       // code 

      } 

      public void endElement(String uri, String localName, 
        String qName) throws SAXException { 

       // code 

      } 

      public void characters(char ch[], int start, int length) throws SAXException { 

       // code 
     }; 

Después constructor llamando existe un aparato ortopédico (!?) Y parece que existe una imperiosa de algunos métodos. Luego, el corsé termina con un punto y coma. Nunca he visto llaves después de una llamada de constructor. ¿Es normal? ¿Como se llama? ¡Gracias!

p.s: en Eclipse, si elimino el punto y coma, dice LocalVariableDeclarationStatement error.

Respuesta

5

Eso es anonymous class.

Las clases anónimas pueden ser útiles cuando desea crear una clase que se deriva de otra clase o interfaz, pero no necesita usar su nueva clase en ningún otro lado en su código.

Una de las cosas más elegantes acerca de las clases anónimas es que le permiten definir una clase de una sola vez exactamente donde se necesita. Además, las clases anónimas tienen una sintaxis sucinta que reduce el desorden en su código.

En el caso específico de la clase DefaultHandler es una clase de ayuda que implementa varias interfaces (EntityResolver, DTDHandler, ContentHandler, ErrorHandler) proporcionando métodos que no hacen nada. La idea es que puede derivar de esta clase y anular solo los métodos específicos que necesita. Esto puede ser mucho menos código que la implementación directa de las interfaces porque entonces deberá proporcionar definiciones para cada método, incluidos los métodos que no tiene intención de utilizar.

5

esta es una definición de clase anónima. DefaultHandler es una interfaz y no tiene implementación y usted está creando una solo allí, mientras crea una instancia.

desde DefaultHandler es una interfaz que espera un objeto de clase que implemente la interfaz DefaultHandler. Pero si no existe dicha clase o si necesita una diferente, puede crear un objeto que satisfaga este requisito implementando la interfaz sobre la marcha.

+0

Sabía que una clase que implementa una interfaz debería definir TODOS los métodos declarados en la interfaz, ¿estoy equivocado? ¡En mi ejemplo, solo 3 métodos están definidos! – Angelo

+1

No es una interfaz, es una clase. Verifique la documentación para DefaultHandler. –

+1

tiene razón, pero 'DefaultHandler' puede ser una AbstractClass y en ese caso necesita definir solo los métodos abstractos – destan

4

Es una clase interna anónima. Tener un google para 'anonymous class java'. Básicamente es una clase creada sobre la marcha desde una interfaz. Toda la definición se especifica en línea como una definición de clase después de la 'nueva parte DefaultHandler()', obviamente, esta definición de clase específica solo puede usarse en este lugar.

1

Esa es una definición de clase anónima. Básicamente es una forma de implementar una clase abstracta o extender una clase. Por lo tanto, está implementando la clase DefaultHandler o extend ing DefaultHandler dependiendo de si DefaultHandler es una clase abstract o una clase concreta.

Cuestiones relacionadas