È Java “Cache” classi anonime?
-
20-09-2019 - |
Domanda
Si consideri il seguente codice:
for(int i = 0;i < 200;i++)
{
ArrayList<Integer> currentList = new ArrayList<Integer>() {{
add(i);
}};
// do something with currentList
}
- In che modo Java trattare la classe di
currentList
? - Sarà considerarlo una classe diversa per ciascuno dei 200 oggetti?
- Sarà una performance colpito anche dopo che è stato creato il primo oggetto?
- E 'caching in qualche modo?
Sono solo curioso:)
Soluzione
ArrayList<Integer> currentList = new ArrayList<Integer>() {{
add(i);
}};
è la creazione di un nuovo istanza della classe anonima ogni volta attraverso il vostro ciclo, non è ridefinire o ricaricare la classe ogni volta. La classe è definita una volta (in fase di compilazione), e una volta caricata (durante l'esecuzione).
Non c'è significativo calo di prestazioni di utilizzare classi anonime.
Altri suggerimenti
Il compilatore sta per trasformare qualsiasi classe anonima a una classe interna di nome. Quindi il codice, sarà trasformato in qualcosa sulla falsariga di:
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);
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow