instantiate class from class object
Use:
type.newInstance()
For creating an instance using the empty costructor, or use the method type.getConstructor(..) to get the relevant constructor and then invoke it.
In Java 9 and afterward, if there's a declared zero-parameter ("nullary") constructor, you'd use Class.getDeclaredConstructor()
to get it, then call newInstance()
on it:
Object foo(Class type) throws InstantiationException, IllegalAccessException, InvocationTargetException {
return type.getDeclaredConstructor().newInstance();
}
Prior to Java 9, you would have used Class.newInstance
:
Object foo(Class type) throws InstantiationException, IllegalAccessException {
return type.newInstance();
}
...but it was deprecated as of Java 9 because it threw any exception thrown by the constructor, even checked exceptions, but didn't (of course) declare those checked exceptions, effectively bypassing compile-time checked exception handling. Constructor.newInstance
wraps exceptions from the constructor in InvocationTargetException
instead.
Both of the above assume there's a zero-parameter constructor. A more robust route is to go through Class.getDeclaredConstructors
or Class.getConstructors
, which takes you into using the Reflection stuff in the java.lang.reflect
package, to find a constructor with the parameter types matching the arguments you intend to give it.
Yes, it is called Reflection. you can use the Class newInstance()
method for this.