We will use an example to better understand FEST-Reflect's fluent interface for constructor invocation.
Let's assume we have a simple class Circle that defines two constructors:
class Circle { private final int radius; Circle() { this(100); } Circle(int radius) { this.radius = radius; } }
The following sections compares constructor invocation using Java Reflection and FEST-Reflect. We are going to assume the following static import:
import static org.fest.reflect.core.Reflection.constructor;
The following code listing shows how to invoke, using Java Reflection, the default constructor in
Circle:
Constructor<Circle> constructor = Circle.class.getConstructor(); AccessController.doPrivileged(new PrivilegedAction<Void>() { public Void run() { constructor.setAccessible(true); return null; } }); Circle circle = constructor.newInstance();
The following code listing invokes the same constructor using FEST-Reflect:
Circle circle = constructor().in(Circle.class).newInstance();
The following code listing shows how to invoke, using Java Reflection, the constructor in
Circle that takes an int parameter:
Constructor<Circle> constructor = Circle.class.getConstructor(int.class); AccessController.doPrivileged(new PrivilegedAction<Void>() { public Void run() { constructor.setAccessible(true); return null; } }); Circle circle = constructor.newInstance(8);
The following code listing invokes the same constructor using FEST-Reflect:
Circle circle = constructor().withParameterTypes(int.class).in(Circle.class).newInstance(8);