Inicialización de doble llave (inicialización de clase interna anónima)

Vi un fragmento de código como este en el proyecto de hoy:

//新建一个List并赋初值A、B、C
ArrayList<String> list = new ArrayList<String>() {
    
    {
    
    
    add("A");
    add("B");
    add("C");
}};

Después de verificar la información, me di cuenta de que se trataba de una inicialización de doble paréntesis, es decir, una inicialización de clase interna anónima.
Cuando normalmente usa una colección, primero crea un objeto y luego usa el método agregar de este objeto para agregar elementos.
El método de escritura anterior utiliza corchetes dobles, lo que significa:
primero cree una clase interna anónima y luego use el bloque de código para inicializar.
De hecho, es una subclase de ArrayList de new (aunque el método de esta subclase es el mismo que el de la clase principal).
Nota: Este método puede causar pérdidas de memoria (porque la subclase usa una referencia a la clase principal), en general, es mejor no usar este método.
En segundo lugar, este método en realidad crea una clase interna anónima no reutilizable en la aplicación. Está bien usarla una o dos veces en la aplicación, pero es una tragedia para ClassLoader usarlo mucho.

Entonces: es mejor no usar este método, no tiene mucho significado sustancial y puede causar problemas importantes.

Supongo que te gusta

Origin blog.csdn.net/fyk844645164/article/details/102721052
Recomendado
Clasificación