Inicialización de doble llave en Java

La combinación de dos procesos separados en Java se conoce como Inicialización de doble llave en Java. Como sugiere el nombre, hay dos llaves {{ incluidas en él.

Una sola llave { no es nada nuevo para los programadores. La primera llave en la inicialización de doble llave se usa para crear una clase interna anónima. Hemos hecho muchas clases internas anónimas de esa manera. La segunda llave es lo que lo hace diferente de las llaves normales en Java. La segunda llave es el bloque de inicialización que se utiliza con la clase interna anónima declarada. Cuando este bloque de inicialización se usa con la clase interna anónima, se conoce como inicialización de doble llave de Java.

Ventajas de la inicialización de doble llave

  • Tiene menos líneas de código en comparación con la forma nativa de creación e inicialización.
  • El código es más legible.
  • La creación y la inicialización se realizan en la misma expresión.

Desventajas de la inicialización de doble llave

  • Es oscuro y no es una forma muy conocida de realizar la inicialización.
  • Crea una clase extra cada vez que lo usamos.
  • No admite el uso del «operador de diamante», una característica introducida en Java 7.
  • No funciona si la clase que intentamos extender está marcada como final.
  • Contiene una referencia oculta a la instancia adjunta, lo que puede provocar pérdidas de memoria.

Nota : debido a estas desventajas, la inicialización con doble llave se considera un antipatrón.

Implementación:

Geeks, si no está al tanto de la inicialización de doble llave, ya está utilizando el enfoque estándar que es sin inicialización de doble llave para el cual hemos propuesto una muestra a continuación de la siguiente manera:  

Procedimiento: cuando usamos una colección en un código, normalmente hacemos lo siguiente.

  1. Declarar una variable para una colección temporal.
  2. Cree una nueva colección vacía y almacene una referencia a ella en la variable.
  3. Pon las cosas en la colección.
  4. Pase la colección al método.

Ejemplo: enfoque estándar

Java

// Java program to Demonstrate Working of Collections
// Without Double Brace Initialization
 
// Importing required classes
import java.util.HashSet;
import java.util.Set;
 
// Main class
// DoubleBrace
public class GFG {
 
    // Method 1
    // Main driver method
    public static void main(String[] args)
    {
        // Creating an empty HashSet of string entries
        Set<String> sets = new HashSet<String>();
 
        // Adding elements to Set
        // using add() method
        sets.add("one");
        sets.add("two");
        sets.add("three");
 
        // Calling method 2 inside main() method
        // Now pass above collection as parameter to method
        useInSomeMethod(sets);
    }
 
    // Method 2
    // Helper method
    private static void useInSomeMethod(Set<String> sets)
    {
        // Print all elements of desired Set
        // where method is invoked
        System.out.println(sets);
    }
}
Producción

[one, two, three]

Explicación de salida:

Los anteriores son pasos normales que todos seguimos en nuestras prácticas de codificación. ¿No cree que Java debería tener una sintaxis más conveniente para las colecciones (listas, mapas, conjuntos, etc.)? Veamos otra manera fácil de hacerlo. Esto se conoce como inicialización de doble llave . Java Double Brace Initialization se utiliza para combinar la creación y la inicialización en una sola declaración. Usando la inicialización de doble llave, podemos inicializar colecciones.

Uso de la inicialización de doble llave 

Procedimiento: cuando usamos una inicialización de doble llave en un código, normalmente hacemos lo siguiente.

  1. Cree una clase interna anónima que amplíe los conjuntos.
  2. Proporcione un bloque de inicialización de instancia que invoque el método add y agregue los elementos al conjunto.
  3. Pase el conjunto al método.

Ejemplo:

Java

// Java program to Demonstrate Working of Collections
// With Double Brace Initialization
 
// Importing required classes
import java.util.HashSet;
import java.util.Set;
 
// Main class
// DoubleBrace
public class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating an empty HashSet
        Set<String> sets = new HashSet<String>()
 
        // Double brace
        {
            {
                // Adding elements to above HashSet
                // This is double brace initialization
                add("one");
                add("two");
                add("three");
            }
        };
 
        // ...
        // Now pass above collection as parameter to method
        // Calling method 2 inside main() method
        useInSomeMethod(sets);
    }
 
    // Method 2
    private static void useInSomeMethod(Set<String> sets)
    {
 
        // Print elements of the desired Set
        // where method is invoked
        System.out.println(sets);
    }
}
Producción

[one, two, three]

Salida Explicación: La primera llave crea una nueva clase interna anónima . Estas clases internas son capaces de acceder al comportamiento de su clase principal. Entonces, en nuestro caso, estamos creando una subclase de la clase HashSet para que esta clase interna pueda usar el método add(). Las segundas llaves son inicializadores de instancias . El código dentro de los inicializadores de una instancia se ejecuta cada vez que se crea una instancia. 

Este artículo es una contribución de Saumya Mishra . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *