Clase opcional de Java 8

Todos los programadores de Java están familiarizados con NullPointerException . Puede bloquear su código. Y es muy difícil evitarlo sin utilizar demasiadas comprobaciones nulas. Entonces, para superar esto, Java 8 ha introducido una nueva clase Opcional en el paquete java.util . Puede ayudar a escribir un código ordenado sin usar demasiadas comprobaciones nulas. Al usar Opcional, podemos especificar valores alternativos para devolver o código alternativo para ejecutar. Esto hace que el código sea más legible porque los hechos que estaban ocultos ahora son visibles para el desarrollador.

Java

// Java program without Optional Class
 
public class OptionalDemo {
    public static void main(String[] args)
    {
        String[] words = new String[10];
        String word = words[5].toLowerCase();
        System.out.print(word);
    }
}

Producción:

Exception in thread "main" java.lang.NullPointerException

Para evitar una terminación anormal, usamos la clase Opcional. En el siguiente ejemplo, estamos usando Opcional. Entonces, nuestro programa puede ejecutarse sin fallar.

El programa anterior usando Clase Opcional

Java

// Java program with Optional Class
 
import java.util.Optional;
 
public class OptionalDemo {
    public static void main(String[] args)
    {
        String[] words = new String[10];
        Optional<String> checkNull
            = Optional.ofNullable(words[5]);
        if (checkNull.isPresent()) {
            String word = words[5].toLowerCase();
            System.out.print(word);
        }
        else
            System.out.println("word is null");
    }
}
Producción

word is null

Opcional es un objeto contenedor que puede contener o no un valor no nulo. Debe importar el paquete java.util para usar esta clase. Si hay un valor presente, isPresent() devolverá verdadero y get() devolverá el valor. Se proporcionan métodos adicionales que dependen de la presencia o ausencia de un valor contenido, como orElse(), que devuelve un valor predeterminado si el valor no está presente, e ifPresent(), que ejecuta un bloque de código si el valor está presente. Esta es una clase basada en valores , es decir, sus instancias son: 

  • Final e inmutable (aunque puede contener referencias a objetos mutables).
  • Se considera igual únicamente en función de equals(), no en función de la igualdad de referencia (==).
  • No tiene constructores accesibles.

Métodos estáticos: Los métodos estáticos son los métodos en Java que se pueden llamar sin crear un objeto de la clase. Se hace referencia a ellos por el nombre de la clase en sí o por la referencia al objeto de esa clase. 

Sintaxis: 

public static void geek(String name)
{
 // code to be executed....
}

// Must have static modifier in their declaration.
// Return type can be int, float, String or user-defined data type.

Puntos importantes: dado que los métodos estáticos pertenecen a la clase, se pueden llamar sin crear el objeto de la clase. A continuación se dan algunos puntos importantes con respecto a los métodos estáticos: 

  • Los métodos estáticos están asociados con la clase en la que residen, es decir, pueden llamarse incluso sin crear una instancia de la clase.
  • Están diseñados con el objetivo de ser compartidos entre todos los objetos creados a partir de la misma clase.
  • Los métodos estáticos no se pueden anular. Pero pueden sobrecargarse, ya que el compilador los resuelve mediante un enlace estático en el momento de la compilación.

La siguiente tabla muestra la lista de métodos estáticos proporcionados por la clase opcional: 

Métodos de instancia: los métodos de instancia son métodos que requieren que se cree un objeto de su clase antes de poder llamarlo. Para invocar un método de instancia, tenemos que crear un Objeto de la clase dentro de la cual está definido. 

Sintaxis: 

public void geek(String name)
{
 // code to be executed....
}
// Return type can be int, float String or user defined data type.

Puntos importantes: los métodos de instancia se pueden llamar dentro de la misma clase en la que residen o desde las diferentes clases definidas en el mismo paquete o en otros paquetes según el tipo de acceso proporcionado al método de instancia deseado. A continuación se dan algunos puntos importantes con respecto a los métodos de instancia: 

  • Los métodos de instancia pertenecen al Objeto de la clase, no a la clase, es decir, pueden llamarse después de crear el Objeto de la clase.
  • Cada objeto individual creado a partir de la clase tiene su propia copia de los métodos de instancia de esa clase.
  • Se pueden anular, ya que se resuelven mediante el enlace dinámico en tiempo de ejecución.

La siguiente tabla muestra la lista de métodos de instancia proporcionados por la clase opcional: 

Métodos concretos: un método concreto significa que el método tiene una definición completa pero se puede anular en la clase heredada. Si hacemos que este método sea final , entonces no se puede anular. Declarar el método o la clase como «final» significa que su implementación está completa. Es obligatorio anular los métodos abstractos. Los métodos concretos se pueden anular en las clases heredadas si no son definitivos. La siguiente tabla muestra la lista de Métodos Concretos proporcionados por la Clase Opcional:

A continuación se dan algunos ejemplos:

Ejemplo 1 : 

Java

// Java program to illustrate
// optional class methods
 
import java.util.Optional;
 
class GFG {
 
    // Driver code
    public static void main(String[] args)
    {
 
        // creating a string array
        String[] str = new String[5];
 
        // Setting value for 2nd index
        str[2] = "Geeks Classes are coming soon";
 
        // It returns an empty instance of Optional class
        Optional<String> empty = Optional.empty();
        System.out.println(empty);
 
        // It returns a non-empty Optional
        Optional<String> value = Optional.of(str[2]);
        System.out.println(value);
    }
}
Producción

Optional.empty
Optional[Geeks Classes are coming soon]

Ejemplo 2: 

Java

// Java program to illustrate
// optional class methods
 
import java.util.Optional;
 
class GFG {
 
    // Driver code
    public static void main(String[] args)
    {
 
        // creating a string array
        String[] str = new String[5];
 
        // Setting value for 2nd index
        str[2] = "Geeks Classes are coming soon";
 
        // It returns a non-empty Optional
        Optional<String> value = Optional.of(str[2]);
 
        // It returns value of an Optional.
        // If value is not present, it throws
        // an NoSuchElementException
        System.out.println(value.get());
 
        // It returns hashCode of the value
        System.out.println(value.hashCode());
 
        // It returns true if value is present,
        // otherwise false
        System.out.println(value.isPresent());
    }
}
Producción

Geeks Classes are coming soon
1967487235
true

Este artículo es una contribución de loginakanksha y Sahil Bansal . 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 *