Clases ANONIMAS
Clases ANONIMAS
Clases ANONIMAS Las clases annimas internas nos permiten trabajar con clases locales sin tener que ponerles nombre. Se utilizan muy frecuentemente para el manejo de eventos de los componentes grficos. Un beneficio de utilizar clases annimas internas es que mantienen la accin del cdigo que manejan en el mismo lugar donde se ejemplariza el controlador GUI. En la clase controladora DiveHandler, se ejemplariza el UIWestPanel, proporcionando las referencias necesarias para el manejo de eventos. Creamos una clase annima interna de la siguiente manera:
ActionListener listener = new ActionListener() { public void actionPerformed(ActionEvent ae) { System.out.println("Anonymous class example"); } };
Podemos combinar la definicin de una clase interna con su utilizacin y registro de un oyente en un bloque de cdigo. Usando la siguiente sintaxis para crear la clase annima interna y registrar un componente, no necesitamos referenciar una variable local:
button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { System.out.println("Button clicked."); } });
Observa el }); de la ltima lnea del ejemplo. El } termina la definicin de la clase interna. El )finaliza la lista de argumentos de addActionListener, y el nico argumento dentro de los corchetes es un argumento del tipo ActionListener, referenciando un ejemplar creado desde nuestra clase annima. Aunque parezca que este objeto ActionListener no tiene un nombre de clase, el compilador le asigna nombres a las clases annimas internas. Despus de compilar las clases con clases annimas internas, veremos que se han creado nuevos ficheros .class que tienen un signo $ y un nmero, como DiveHandler$1.class. Las clases annimas suelen ser ms concisas que las clases miembro, y hacen posible que para nuestra conveniencia definamos objetos oyentes donde los estamos utilizando. Pero se pueden hacer difciles de leer si el cdigo del mtodo del interface es largo y complejo. Una buena forma de mantener el cdigo limpio es encerrar los grandes trozos de cdigo en sus propios mtodos, y luego llamar al mtodo desde dentro del mtodo del interface.