Utilities: Objects.requireNonNull with a message supplier avoids building the string eagerly

The overload of requireNonNull that takes a Supplier<String> only builds the failure message when the value is actually null, avoiding the cost of assembling a message string on every successful call.

Code
int[] messagesBuilt = {0};
Supplier<String> lazyMessage = () -> {
    messagesBuilt[0]++;
    return "name must not be null";
};
Objects.requireNonNull("Ada", lazyMessage);
System.out.println("Messages built after a valid call: " + messagesBuilt[0]);
try {
    Objects.requireNonNull(null, lazyMessage);
} catch (NullPointerException e) {
    System.out.println(e.getClass().getSimpleName() + ": " + e.getMessage());
}
System.out.println("Messages built after a failing call: " + messagesBuilt[0]);
Output
Messages built after a valid call: 0
NullPointerException: name must not be null
Messages built after a failing call: 1
Advertisement
More in JAVA

Run this yourself in the Online Java Compiler, spin up a live REST API in the API Sandbox, or practise with Java interview questions.

Published 2026-09-27

© Java Coding Hub · About · Contact · Privacy · Terms