Como dijeron algunos otros, muchas veces, cuando se utiliza una clase interna anónima, que también se utiliza en algunos otros lugares también ...
De este modo se puede duplicar fácilmente el código de la clase interna a muchos lugares ... Esto no parece un problema cuando está utilizando clases internas muy simples para filtrar/clasificar colecciones, usando predicados, comparador o algo así ...
Pero debe saber que cuando usa 3 veces una clase interna anónima que lo hace exactamente lo mismo (por ejemplo, eliminar el "" de una Colección), en realidad estás creando 3 nuevas clases en el PermGen de Java.
Así que si todo el mundo utilizan las clases internas en todas partes, esto puede conducir a una aplicación que tiene un PermGen más grande. De acuerdo con la solicitud que esto puede ser un problema ... Si usted está trabajando en la industria, es posible programar aplicaciones integradas que tienen una memoria limitada, que se deben optimizar ...
Nota: este es también el motivo por el doble rizado sintaxis de refuerzo (innerclass anónima con el bloque de inicialización no estática) a veces se considera como un anti patrón:
new ArrayList<String>() {{
add("java");
add("jsp");
add("servlets");
}}
usted debe preguntar a las personas que prohíbe que los use ... en mi humilde opinión, todo depende del contexto .. .
Para la referencia, debo mencionar que ** Java 8 ** presenta [** Lambda Expressions **] (https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html). – vellotis
También, buena suerte unidad probando las clases internas ... – twiz