Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Clases Internas Anónimas

Java JDK 7.0 / Eclipse / NetBeans

Hola a todos

En la poquísima documentación (tanto física como virtual) sobre Clases Internas Anónimas se indica que básicamente (y pareciese casi únicamente o exclusivamente) se utilizan en Aplicaciones Gráficas para gestionar los diferentes Eventos de los Componentes utilizados en un JFrame por ejemplo, para evitar un mayor consumo de recursos.

1º ¿Esta apreciación es cierta o no?

2º ¿Podría ser que se señale una Utilidad Práctica general, quizás prescindiendo de la Gestión de Eventos de Componentes, de las Clases Internas Anónimas?

Desde ya Muchísimas Gracias

septiembre 14, 2015 | Registered CommenterSkar.2007

Hola @Skar.2007

1º ¿Esta apreciación es cierta o no?. No, la respuesta esta en lo que hace, y es permitir al programador, re definir el comportamiento que tendrá el objeto de la clase que se esta creando, con re definir el comportamiento estoy hablando de sobrescribir o definir(si se tratara de una interfaz) uno a varios métodos.

se usa mucho en los componentes graficos, porque en muchas ocasiones, el comportamiento asignado a un componente gráfico es único, por ejemplo la acción de un boton, y seria muy molesto definir tantas clases que implemente de ActionListener como botones tengamos, y solo crear un objeto de esa clase que se asignara al boton correspondiente. Pero no es exclusivo de ello, lo que nos lleva a otra tu otra pregunta

2º ¿Podría ser que se señale una Utilidad Práctica general, quizás prescindiendo de la Gestión de Eventos de Componentes, de las Clases Internas Anónimas?

En General lo que dije al principio, cuando necesites crear un objeto que tenga un comportamiento ligero a la clase (de tratarse de una clase), o de una interface aunque en este caso estas obligado a definir todos los métodos (no default, en el caso de java 8) de la interfaz.

Especifico, te cuento mi experiencia y porque decidí utilizarlas (no entrare en detalle y solo daré la generalidad de mi experiencia),
tenia varias tareas que tenia que ejecutar en paralelo, así que tenia que ejecutar varios Thread, pero por la naturaleza de los métodos tenia que acceder a ciertos atributos de la clase que los invocaría (otra ventaja de las clases internas anónimas te permiten acceder a los atributos y métodos de la clase que los crea),

asi que en ves de hacer tantas clases que implementara Runnable como hilos necesitara
mejor realice

Thread hilo1=new Thread(new Runnable(){ public void run(){ metodo1(); }});
Thread hilo2=new Thread(new Runnable(){ public void run(){ metodo2(); }});
hilo1.start();
hilo2.start();

o con lambda en java 8
Thread hilo1=new Thread(()->{ metodo1(); });
Thread hilo2=new Thread(()->{ metodo2(); });
(y como ves lambda es un caso especial de una clase interna anónima, por no decir lo mismo con
una sintaxis más compacta que solo aplica a interfaces (o clases?)con un solo método).

, porque decidí hacer esto uno porque necesitaba acceder a los atributos y métodos de la clase que los invocaba, otra porque la clase en cuestión solo serviría para ese hilo, y no aportaría mucho tener una clase (en archivo o interna) solo por ello.

Todo lo que te he dicho es solo mi criterio basado, en los pocos años que llevo trabajando con java

Y como siempre digo, de una herramienta es mejor saber que hace, que saber donde la usaron,
esto porque te es más fácil decidir y encontrar el momento adecuado para usarlo cuando sabes que hace.


Espero que mi explicación te sea de ayuda.

saludos

septiembre 14, 2015 | Unregistered Commenterjhosep