Skip to main content

Command Palette

Search for a command to run...

Optional Class in Java8

Updated
3 min readView as Markdown
Optional Class in Java8

The Optional class in Java was introduced in Java 8 to address the problem of handling potentially null values more effectively. It provides a container that may or may not contain a non-null value. Optional is designed to encourage a more explicit and safer way of handling null values, reducing the likelihood of NullPointerExceptions. The class encourages developers to consider the possibility of a value being absent and forces them to handle such cases explicitly.

Common Methods in Optional Class:

  1. of(T value):

    • Creates an Optional containing a non-null value.
    Optional<String> optional = Optional.of("Hello, Optional!");
  1. ofNullable(T value):

    • Creates an Optional containing a value if it's non-null; otherwise, returns an empty Optional.
    String message = "Hello, Optional!";
    Optional<String> optional = Optional.ofNullable(message);
  1. empty():

    • Returns an empty Optional.
    Optional<String> emptyOptional = Optional.empty();
  1. isPresent():

    • Returns true if the Optional contains a value, otherwise returns false.
    Optional<String> optional = Optional.of("Hello, Optional!");
    if (optional.isPresent()) {
        // Value is present, do something
    }
  1. get():

    • Returns the value if present; otherwise, throws NoSuchElementException.
    Optional<String> optional = Optional.of("Hello, Optional!");
    String value = optional.get();
  1. orElse(T other):

    • Returns the value if present; otherwise, returns the specified default value.
    Optional<String> optional = Optional.empty();
    String result = optional.orElse("Default Value");
  1. orElseGet(Supplier<? extends T> other):

    • Returns the value if present; otherwise, returns the result produced by the supplying function.
    Optional<String> optional = Optional.empty();
    String result = optional.orElseGet(() -> "Default Value");
  1. orElseThrow(Supplier<? extends X> exceptionSupplier):

    • Returns the value if present; otherwise, throws an exception produced by the supplying function.
    Optional<String> optional = Optional.empty();
    String result = optional.orElseThrow(() -> new NoSuchElementException("Value is absent"));

Example Usage:

import java.util.Optional;

public class OptionalExample {
    public static void main(String[] args) {
        // Creating Optional with a non-null value
        Optional<String> messageOptional = Optional.of("Hello, Optional!");

        // Creating Optional with a nullable value
        String nullableMessage = null;
        Optional<String> nullableOptional = Optional.ofNullable(nullableMessage);

        // Creating an empty Optional
        Optional<String> emptyOptional = Optional.empty();

        // Checking if a value is present
        if (messageOptional.isPresent()) {
            System.out.println(messageOptional.get());
        }

        // Using orElse to provide a default value
        String defaultValue = nullableOptional.orElse("Default Value");
        System.out.println(defaultValue);

        // Using orElseGet with a Supplier
        String result = emptyOptional.orElseGet(() -> "Another Default");
        System.out.println(result);

        // Using orElseThrow to handle absence with an exception
        try {
            String value = emptyOptional.orElseThrow(() -> new RuntimeException("Value is absent"));
            System.out.println(value);
        } catch (RuntimeException e) {
            System.err.println(e.getMessage());
        }
    }
}

In this example:

  • Optional is used to wrap values, and various methods are demonstrated to handle the presence or absence of values.

  • orElse, orElseGet, and orElseThrow are used to provide default values or handle the absence of values gracefully.

  • The use of isPresent and get methods shows how to check for the presence of a value before accessing it.

By using Optional, developers can create more robust and predictable code, reducing the likelihood of NullPointerExceptions and making the handling of absent values more explicit.

More from this blog

Navnit Raj

20 posts

Seasoned software developer specializing in Java Angular and various other cutting-edge technologies.My goal is to bring expertise,creativity, and a collaborative spirit to every development endeavor