Java 7 has introduced Objects
class which provides static utility methods for operating on objects. The Java developers certainly welcome this class as it saves writing few lines of code. These utility methods were earlier available in Guava libraries. Now they are part of the Java API within the utility class Objects
.
In this blog post, I’m writing how the methods of Objects
class simplify code.
static String toString(Object obj)
This method returns null when the argument is null. When the argument is not null it returns the String returned by its toString()
method. Listing 1 shows the code prior to Java 7 and Listing 2 shows the code in Java 7.
Object obj;
...
if(obj == null) {
return null;
}
else {
return obj.toString();
}
Listing 1. Code prior to Java 7 - Return null if the object is null otherwise returns result of its toString()
method
Object obj;
...
return Objects.toString(obj);
Listing 2. Code in Java 7 - Return null if the object is null otherwise returns result of its toString()
method
static String toString(Object obj, String nullDefault)
This method returns the default String value passed as second argument when the first argument is null. When the first argument is not null it returns the String returned by its toString()
method. Listing 3 and 4 show the code prior to Java 7 and using Java 7 respectively.
Object obj;
...
if(obj == null) {
return “Unknown”;
}
else {
return obj.toString();
}
Listing 3. Code prior to Java 7 - Return “Unknown” if the object is null otherwise returns result of its toString()
method
Object obj;
...
return Objects.toString(obj, “Unknown”);
Listing 4. Code in Java 7 - Return “Unknown” if the object is null otherwise returns result of its toString()
method
static <T> T requireNonNull(T obj)
This method throws NullPointerException
when the argument is null. When it is not null it returns the same argument. This method is designed for parameter validation in methods and constructors. Listing 5 shows the code prior to Java 7 and Listing 6 shows the use of this method.
class Project {
String name;
void setName(String name) {
if(name == null) {
throw new NullPointerException();
}
this.name = name;
}
}
Listing 5. Code prior to Java 7 – Throw NullPointerException
if the name is null
class Project {
String name;
void setName(String name) {
this.name = Objects.requireNonNull(name);
}
}
Listing 6. Code in Java 7 – Throw NullPointerException
if the name is null. If name is not null set the name property
static <T> T requireNonNull(T obj, String message)
This method throws NullPointerException
when the first argument is null. The second argument is passed as a message to the NullPointerException
. When the first argument is not null it returns the same argument. This method allows to set the exception message. Listing 7 shows code prior to Java 7 and Listing 8 shows the use of this method.
class Project {
String name;
void setName(String name) {
if(name == null) {
throw new NullPointerException(
“Name cannot be null”);
}
this.name = name;
}
}
Listing 7. Code prior to Java 7 – Throw NullPointerException
if the name is null with the message “Name cannot be null”
class Project {
String name;
void setName(String name) {
this.name = Objects.requireNonNull(name,
“Name cannot be null”);
}
}
Listing 8. Code in Java 7 – Throw NullPointerException
if the name is null with the message “Name cannot be null”. If name is not null set the name property
static boolean equals(Object a, Object b)
This method compares two objects for equality. When the object references are same or both objects are null this method returns true. When the objects are not identical, this method returns the result of the equals()
method of first argument if it is not null. If the first argument is null and the other argument is not null, this method returns false. Listing 9 and 10 show the code prior to Java 7 and the code in Java 7 respectively.
String str1, str2;
...
if(str1 == str2 || (str1 != null && str1.equals(str2))) {
Listing 9. Code prior to Java 7 – Compare two objects for equality
String str1, str2;
...
if(Objects.equals(str1,str2)) {
Listing 10. Code in Java 7 – Compare two objects for equality
static boolean deepEquals(Object a, Object b)
This method returns true if both arguments are deeply equal to each other otherwise it returns false. If both arguments of this method are null, it returns true. If both argument references are not same, both are not null and both are arrays, the result of Arrays.deepEquals()
is returned. Listing 11 shows the code prior to Java 7 and Listing 12 shows the use of this method.
int[][] x,y;
...
if(x == y || (x != null && y != null && Arrays.deepEquals(x,y))) {
Listing 11. Code prior to Java 7 – Check if two objects are deeply equal
int[][] x,y;
...
if(Objects.deepEquals(x,y)) {
Listing 12. Code in Java 7 – Check if two objects are deeply equal
staticint <T> int compare(T a, T b, Comparator<? super T> c)
If first two arguments are identical this method returns 0 otherwise it returns the result of compare()
method of the Comparator implementation passed as third argument. The Comparator
implementation decides whether a NullPointerException
is thrown when the objects to be compared are null. Listing 13 and 14 show the code prior to Java 7 and using the Objects
class respectively.
int compare(Project project1, Project project2,
Comparator<Project> comparator) {
return project1 == project2 ? 0 :
comparator.compare(project1, project2);
}
Listing 13. Code prior to Java 7 – Compare two projects
int compare(Project project1, Project project2,
Comparator<Project> comparator) {
return Objects.compare(project1, project2, comparator);
}
Listing 14. Code in Java 7 – Compare two projects
static int hashCode(Object obj)
If the argument passed to this method is null it returns 0. If the argument is not null, this method returns the hash code of the argument. Listing 15 shows the code prior to Java 7. Listing 16 shows the use of this method.
Object obj;
...
int hashcode = obj == null ? 0 : obj.hashCode();
Listing 15. Code prior to Java 7 – Computing hashcode
Object obj;
...
int hashcode = Objects.hashCode(obj);
Listing 16. Code in Java 7 – Computing hashcode