The Java Objects class is a utility class introduced in Java 7 and expanded in Java 8 to provide a collection of static methods to help operating on Java objects. It has null-safe and null-tolerant methods for computing the hash code of an object, returning a string for an object, comparing two objects, null checking and more.
According to Brian Goetz (Oracle’s architect for the Java language), its features are also being introduced into the core of the language, so there is a chance the Objects
class becomes more popular in the years that are coming.
That said, we are about to explore how to work with the Objects
class.
We often have methods or constructors that receive mandatory parameters that we would like to test against null
and throw an exception in case they are null
:
public class ObjectsExample { public void foo(String bar) { if (bar == null) { throw new NullPointerException(); } // Do something with bar... } }
With Objects, the same behaviour is coded in a single line like the following, it’s gonna check if bar
is null and thrown a NullPointerException
if so:
import java.util.Objects; public class ObjectsExample { public void foo(String bar) { Objects.requireNonNull(bar); // Do something with bar... } }
You can also use the overloaded versions of the method to provide additional information like the Exception’s message
:
Objects.requireNonNull(bar, "Bar can't be null!");
Or provide a supplier that will create the Exception’s message
only if necessary:
import java.util.Objects; public class ObjectsExample { public void foo(String bar) { Objects.requireNonNull(bar, this::createErrorMessage); // Do something with bar... } public String createErrorMessage() { return "Bar can't be null!!!"; } }
If you have two objects to compare for equality using Object.equals(Object), you’d need to check if the first argument is null before comparing:
public boolean baz(Object first, Object second) { if (first != null) { return first.equals(second); } return (second == null); }
However, using Objects.equals(Object, Object) you can get rid of the null check. The code below produces the same output as the previously one:
public boolean baz(Object first, Object second) { return Objects.equals(first, second); }
Sometimes you’d like to print the string representation of an Object using the Object.toString() method. This is sometimes useful when you, e.g. want to print object’s state to the log file after an exception occurred:
logger.error("Xyz error. Foo's state: " + foo.toString());
What if foo
is null
? Our old friend NullPointerException
couldn’t wait to be thrown. So we’d write something like the following to be safe:
logger.error("Xyz error. Foo's state: " + foo == null ? "Foo is null" : foo.toString());
A bit verbose, but we can make it simpler using Objects.toString(Object):
logger.error("Xyz error. Foo's state: " + Objects.toString(foo));
Or use its overloaded version to provide a default message to be print if foo
is null
:
logger.error("Xyz error. Foo's state: " + Objects.toString(foo, "Foo is null"));
That was just an idea of what the Objects
class can do for you. Sometimes we fill our applications with third party libraries seeking for utility methods, but sometimes we are likely to find them in the JDK itself.
To discover more, please refer to the Java Objects javadoc.
I hope it helps.
Cya!
This guide will show you how to create a Python function decorator with a few…
This guide will show you how to fix the error Got permission denied while trying…
This guide will show you how to create a Python virtual environment on Intellij IDEA…
This tutorial will quickly show you how to to find and kill processes on Linux,…
This guide shows a possible solution for Python error Relocation R_X86_64_PC32 against symbol can not…
I condensed below a cheat sheet of Kubernetes useful commands. I will keep updating this…