Logo

dev-resources.site

for different kinds of informations.

Handling NullPointerException with Optional

Published at
12/26/2024
Categories
webdev
springboot
java
designpatterns
Author
Parzival
Handling NullPointerException with Optional

Definition

NPE is a runtime exception that occurs when trying to use a null reference. The JVM throws this exception to protect against dereferencing null pointers, which could cause program crashes.

Common Causes

Basic Example

String name = null;
int length = name.length(); // NPE thrown here

Here, we're trying to call a method on a null reference. The variable name contains no object, so we can't invoke length().

Nested Objects Example

class User {
    Address address;
}
class Address {
    String street;
}

User user = new User();
String street = user.address.street; // NPE: address is null

This shows how nested object access can fail. While user exists, address is null because we haven't initialized it.

Collection Example

List<String> items = null;
items.add("item"); // NPE

Collections should be initialized before use. Better to initialize as empty: List<String> items = new ArrayList<>();

Optional Usage Explained

Basic Optional Chaining

Optional<User> user = Optional.of(new User());
String street = user
    .flatMap(User::getAddress)  // Converts User to Optional<Address>
    .map(Address::getStreet)    // Converts Address to Optional<String>
    .orElse("Unknown");         // Provides default if null

This replaces nested null checks with a fluent API. Each step safely handles potential nulls.

Map and Filter

Optional<String> upperStreet = Optional.ofNullable(user)
    .filter(u -> u.getName() != null)  // Only proceed if name exists
    .map(User::getName)                // Get the name
    .map(String::toUpperCase);         // Transform it

This shows how to transform values while handling nulls safely.

Default Values

String result = Optional.ofNullable(someString)
    .orElse("default");

A clean way to provide fallback values instead of null checks.

Conditional Execution

Optional.ofNullable(user)
    .ifPresent(u -> System.out.println(u.getName()));

Execute code only when the value exists, replacing if-not-null checks.

Featured ones: