Cierre en Java

MD Aminul Islam 12 octubre 2023
  1. Cierre en Java
  2. Uso anidado de cierres en Java
Cierre en Java

Si definimos una expresión lambda a través de la cual deseamos incrementar el valor de una variable, arrojará un error.

Sin embargo, hay una solución fácil a este problema. Mediante el uso de Cierres, podemos prevenir este error.

Cierres son la función en línea y tienen expresiones valoradas, lo que significa que son las funciones de una clase con variables limitadas. Otra característica interesante de Cierres es que se pueden pasar a otra función como parámetro.

Este artículo discutirá los Cierres en detalle y proporcionará los ejemplos y explicaciones necesarios para facilitar el tema.

Antes de entrar en la discusión, veamos la sintaxis general del cierre, que es algo como lo siguiente.

(List_of_Arguments) -> {
  Function_Body
}

Cierre en Java

En nuestro siguiente ejemplo, ilustraremos el más básico de los Cierres donde usamos Cierres para combinar dos cadenas. Echemos un vistazo a nuestro código a continuación.

package javacodes;
// Importing necessary packages
import java.io.*;

interface CombineString { // Defining a interface
  public String concat(String a, String b);
}

// The controlling class
public class JavaClosures {
  public static void main(String[] args) {
    // Using the "Lambda Expression"
    CombineString cs = (str1, str2) -> str1 + str2;

    System.out.println("The combined string is: " + cs.concat("Alen", " Walker"));
  }
}

Ya comentamos el propósito de cada línea. En el ejemplo anterior, primero definimos una interfaz llamada CombineString con un método abstracto llamado concat.

Ahora, en nuestra clase de control, acabamos de crear un Cierre para definir el método abstracto.

Después de ejecutar el ejemplo anterior, obtendrá un resultado como el siguiente.

The combined string is: Alen Walker

Uso anidado de cierres en Java

Profundicemos un poco más en nuestro tema. Mire nuestro ejemplo a continuación, donde creamos una llamada anidada entre dos Cierres.

interface PrintData { // An interface to print data
  public void Print(int data); // An abstract method to print data
}

interface NumberAdd { // An interface to add two numbers
  public void add(int a, int b); // An abstract method to add two numbers
}

// Main controlling class
public class JavaClosures {
  public static void main(String[] args) {
    // Using the "Lambda Expression"
    PrintData printdata = (str) -> {
      System.out.println("The combined string is: " + str);
    };
    NumberAdd addnum = (x, y) -> {
      printdata.Print(x + y); // The nested call
    };
    addnum.add(5, 5); // Calling the add method
  }
}

Ya comentamos el propósito de cada línea. En nuestro ejemplo anterior, primero creamos las interfaces PrintData y NumberAdd.

La interfaz PrintData contiene el método abstracto Print, y la interfaz NumberAdd contiene el método abstracto add.

Ahora, en nuestra clase de control, primero definimos el método abstracto Imprimir, como vamos a llamar a este método desagradablemente.

Luego definimos el método abstracto agregar, y si observa la definición de este método, verá que llamamos al método Imprimir.

Después de ejecutar el ejemplo anterior, obtendrá un resultado como el que se muestra a continuación.

The combined string is: 10

Tenga en cuenta que los ejemplos de código compartidos aquí están en Java y debe instalar Java en su entorno si su sistema no contiene Java.

MD Aminul Islam avatar MD Aminul Islam avatar

Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.

LinkedIn