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.
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().
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.
List<String> items = null; items.add("item"); // NPE
Collections should be initialized before use. Better to initialize as empty: List
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.
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.
String result = Optional.ofNullable(someString) .orElse("default");
A clean way to provide fallback values instead of null checks.
Optional.ofNullable(user) .ifPresent(u -> System.out.println(u.getName()));
Execute code only when the value exists, replacing if-not-null checks.
The above is the detailed content of Handling NullPointerException with Optional. For more information, please follow other related articles on the PHP Chinese website!