Java 8/9 Best Practices — Part-1 (Static Factory Methods)

Should Consider Static Factory Methods for Creating Objects

There are various ways to create the objects in java, In a traditional way for the class to allow a client to create an instance is to provide the public default constructor. However, there is another way to create an instance of the Class. A class can provide a static public method which is a static method that returns the instance of the class. Let's see the example

Java
 




x


 
1
public static Boolean valueOf(boolean a){
2
  return a ? Boolean.TRUE : Boolean.FALSE;
3
}



There are various advantages and disadvantages to consider Static Methods -

Advantages

  1. Static Methods have a name
  2. Not required to create an object every time it gets invoked
  3. They can return an object of any subtype of their return type
  4. Class of the returned object can vary from call to call as a function of the input parameters
  5. Class of the returned object need not exist when the class containing the method is written

Limitations

  1. A class without public or protected constructor can not be sub-classed if we only expose static Method for object creation
  2. It could be difficult for the programmer to find the method where the object is being created unlike a constructor

Some common names for static factory methods

Java
 




xxxxxxxxxx
1


 
1
Date d = Date.from (instance); //from
2
Set<Status> statuses = EnumSet.of(INITIATED, INPROGRESS,COMPLETED);//Use of Of
3
String str1 = String.valueOf(Integer.MAX_VALUE); // use of valueOf
4
Object newArray = Array.newInstance(classObject, length) // use of newInstance
5
BufferedReader br = Files.newBufferedReader(path);//use of newType
6
 
          



Both Static factory methods and public constructors both have their users. Static factories are preferable, so avoid the defining public constructor and think if Static factories can be used.

Ref - Effective Java - Third Edition by Joshua Bloch

 

 

 

 

Top