Frage

Betrachten Sie den folgenden Code:

for(int i = 0;i < 200;i++)
{
  ArrayList<Integer> currentList = new ArrayList<Integer>() {{
    add(i);
  }};
  // do something with currentList
}
  • Wie wird Java die Klasse von behandeln? currentList?
  • Wird es für jedes der 200 Objekte eine andere Klasse betrachten?
  • Wird es auch nach dem Erstellen des ersten Objekts ein Performance -Hit sein?
  • Stützt es irgendwie?

Ich bin nur Neugierig :)

War es hilfreich?

Lösung

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

Erstellt ein neues Beispiel Die anonyme Klasse jedes Mal durch Ihre Schleife wird die Klasse nicht jedes Mal neu definiert oder neu laden. Die Klasse wird einmal (zur Kompilierung) definiert und einmal (zur Laufzeit) geladen.

Es gibt keine signifikante Leistung, die durch die Verwendung anonymer Klassen verwendet wird.

Andere Tipps

Der Compiler wird jede anonyme Klasse in eine benannte innere Klasse verwandeln. Ihr Code wird also in etwas umgewandelt, das in den Zeilen von:

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);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top