As a bonus, let's look at several snippets of code that are commonly needed when working with reflection and constructors.
First, let's fetch the number of available constructors:
Class<Car> clazz = Car.class;
Constructor<?>[] cnstrs = clazz.getConstructors();
System.out.println("Car class has "
+ cnstrs.length + " constructors"); // 4
Now, let's see how many parameters have each of these four constructors:
for (Constructor<?> cnstr : cnstrs) {
int paramCount = cnstr.getParameterCount();
System.out.println(" Constructor with "
+ paramCount + " parameters");
}
In order to get details about each parameter of a constructor, we can call Constructor.getParameters(). This method returns an array of Parameter (this class was added in JDK 8 and it provides a comprehensive list of methods for dissecting a parameter):
for (Constructor<?> cnstr : cnstrs) {
Parameter[] params = cnstr.getParameters();
...
}
If we just need to know the types of the parameters, then Constructor.getParameterTypes() will do the job:
for (Constructor<?> cnstr : cnstrs) {
Class<?>[] typesOfParams = cnstr.getParameterTypes();
...
}