Pregunta

Considere el siguiente código:

for(int i = 0;i < 200;i++)
{
  ArrayList<Integer> currentList = new ArrayList<Integer>() {{
    add(i);
  }};
  // do something with currentList
}
  • ¿Cómo tratará Java a la clase de currentList?
  • ¿Lo considerará una clase diferente para cada uno de los 200 objetos?
  • ¿Será un éxito de rendimiento incluso después de que se cree el primer objeto?
  • ¿Lo está almacenando en caché de alguna manera?

Tengo curiosidad :)

¿Fue útil?

Solución

ArrayList<Integer> currentList = new ArrayList<Integer>() {{
    add(i);
  }};

está creando un nuevo instancia De la clase anónima cada vez a través de su bucle, no es redefinir o recargar la clase cada vez. La clase se define una vez (en el momento de la compilación) y se carga una vez (en tiempo de ejecución).

No hay un rendimiento significativo por el uso de clases anónimas.

Otros consejos

El compilador transformará cualquier clase anónima en una clase interna nombrada. Entonces, su código se transformará en algo en la línea de:

class OuterClass$1 extends ArrayList<Integer> {
    OuterClass$1(int i) {
      super();
      add(i);
    }
}

for (int i = 0; i < 200; i++) {
    ArrayList<Integer> currentList = new OuterClass$1(i);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top