Invoking Constructors

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;

Constructors without parameters

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();

Constructors with parameters

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);