org.apache.commons.lang3.reflect
Class ConstructorUtils

java.lang.Object
  extended by org.apache.commons.lang3.reflect.ConstructorUtils

public class ConstructorUtils
extends Object

Utility reflection methods focused on constructors, modeled after MethodUtils.

Known Limitations

Accessing Public Constructors In A Default Access Superclass

There is an issue when invoking public constructors contained in a default access superclass. Reflection locates these constructors fine and correctly assigns them as public. However, an IllegalAccessException is thrown if the constructors is invoked.

ConstructorUtils contains a workaround for this situation. It will attempt to call setAccessible on this constructor. If this call succeeds, then the method can be invoked as normal. This call will only succeed when the application has sufficient security privileges. If this call fails then a warning will be logged and the method may fail.

Since:
2.5
Version:
$Id: ConstructorUtils.java 1144010 2011-07-07 20:02:10Z joehni $

Constructor Summary
ConstructorUtils()
          ConstructorUtils instances should NOT be constructed in standard programming.
 
Method Summary
static
<T> Constructor<T>
getAccessibleConstructor(Class<T> cls, Class<?>... parameterTypes)
          Finds a constructor given a class and signature, checking accessibility.
static
<T> Constructor<T>
getAccessibleConstructor(Constructor<T> ctor)
          Checks if the specified constructor is accessible.
static
<T> Constructor<T>
getMatchingAccessibleConstructor(Class<T> cls, Class<?>... parameterTypes)
          Finds an accessible constructor with compatible parameters.
static
<T> T
invokeConstructor(Class<T> cls, Object... args)
          Returns a new instance of the specified class inferring the right constructor from the types of the arguments.
static
<T> T
invokeConstructor(Class<T> cls, Object[] args, Class<?>[] parameterTypes)
          Returns a new instance of the specified class choosing the right constructor from the list of parameter types.
static
<T> T
invokeExactConstructor(Class<T> cls, Object... args)
          Returns a new instance of the specified class inferring the right constructor from the types of the arguments.
static
<T> T
invokeExactConstructor(Class<T> cls, Object[] args, Class<?>[] parameterTypes)
          Returns a new instance of the specified class choosing the right constructor from the list of parameter types.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ConstructorUtils

public ConstructorUtils()

ConstructorUtils instances should NOT be constructed in standard programming. Instead, the class should be used as ConstructorUtils.invokeConstructor(cls, args).

This constructor is public to permit tools that require a JavaBean instance to operate.

Method Detail

invokeConstructor

public static <T> T invokeConstructor(Class<T> cls,
                                      Object... args)
                           throws NoSuchMethodException,
                                  IllegalAccessException,
                                  InvocationTargetException,
                                  InstantiationException

Returns a new instance of the specified class inferring the right constructor from the types of the arguments.

This locates and calls a constructor. The constructor signature must match the argument types by assignment compatibility.

Type Parameters:
T - the type to be constructed
Parameters:
cls - the class to be constructed, not null
args - the array of arguments, null treated as empty
Returns:
new instance of cls, not null
Throws:
NoSuchMethodException - if a matching constructor cannot be found
IllegalAccessException - if invocation is not permitted by security
InvocationTargetException - if an error occurs on invocation
InstantiationException - if an error occurs on instantiation
See Also:
invokeConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])

invokeConstructor

public static <T> T invokeConstructor(Class<T> cls,
                                      Object[] args,
                                      Class<?>[] parameterTypes)
                           throws NoSuchMethodException,
                                  IllegalAccessException,
                                  InvocationTargetException,
                                  InstantiationException

Returns a new instance of the specified class choosing the right constructor from the list of parameter types.

This locates and calls a constructor. The constructor signature must match the parameter types by assignment compatibility.

Type Parameters:
T - the type to be constructed
Parameters:
cls - the class to be constructed, not null
args - the array of arguments, null treated as empty
parameterTypes - the array of parameter types, null treated as empty
Returns:
new instance of cls, not null
Throws:
NoSuchMethodException - if a matching constructor cannot be found
IllegalAccessException - if invocation is not permitted by security
InvocationTargetException - if an error occurs on invocation
InstantiationException - if an error occurs on instantiation
See Also:
Constructor.newInstance(java.lang.Object...)

invokeExactConstructor

public static <T> T invokeExactConstructor(Class<T> cls,
                                           Object... args)
                                throws NoSuchMethodException,
                                       IllegalAccessException,
                                       InvocationTargetException,
                                       InstantiationException

Returns a new instance of the specified class inferring the right constructor from the types of the arguments.

This locates and calls a constructor. The constructor signature must match the argument types exactly.

Type Parameters:
T - the type to be constructed
Parameters:
cls - the class to be constructed, not null
args - the array of arguments, null treated as empty
Returns:
new instance of cls, not null
Throws:
NoSuchMethodException - if a matching constructor cannot be found
IllegalAccessException - if invocation is not permitted by security
InvocationTargetException - if an error occurs on invocation
InstantiationException - if an error occurs on instantiation
See Also:
invokeExactConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])

invokeExactConstructor

public static <T> T invokeExactConstructor(Class<T> cls,
                                           Object[] args,
                                           Class<?>[] parameterTypes)
                                throws NoSuchMethodException,
                                       IllegalAccessException,
                                       InvocationTargetException,
                                       InstantiationException

Returns a new instance of the specified class choosing the right constructor from the list of parameter types.

This locates and calls a constructor. The constructor signature must match the parameter types exactly.

Type Parameters:
T - the type to be constructed
Parameters:
cls - the class to be constructed, not null
args - the array of arguments, null treated as empty
parameterTypes - the array of parameter types, null treated as empty
Returns:
new instance of cls, not null
Throws:
NoSuchMethodException - if a matching constructor cannot be found
IllegalAccessException - if invocation is not permitted by security
InvocationTargetException - if an error occurs on invocation
InstantiationException - if an error occurs on instantiation
See Also:
Constructor.newInstance(java.lang.Object...)

getAccessibleConstructor

public static <T> Constructor<T> getAccessibleConstructor(Class<T> cls,
                                                          Class<?>... parameterTypes)

Finds a constructor given a class and signature, checking accessibility.

This finds the constructor and ensures that it is accessible. The constructor signature must match the parameter types exactly.

Type Parameters:
T - the constructor type
Parameters:
cls - the class to find a constructor for, not null
parameterTypes - the array of parameter types, null treated as empty
Returns:
the constructor, null if no matching accessible constructor found
See Also:
Class.getConstructor(java.lang.Class...), getAccessibleConstructor(java.lang.reflect.Constructor)

getAccessibleConstructor

public static <T> Constructor<T> getAccessibleConstructor(Constructor<T> ctor)

Checks if the specified constructor is accessible.

This simply ensures that the constructor is accessible.

Type Parameters:
T - the constructor type
Parameters:
ctor - the prototype constructor object, not null
Returns:
the constructor, null if no matching accessible constructor found
See Also:
SecurityManager

getMatchingAccessibleConstructor

public static <T> Constructor<T> getMatchingAccessibleConstructor(Class<T> cls,
                                                                  Class<?>... parameterTypes)

Finds an accessible constructor with compatible parameters.

This checks all the constructor and finds one with compatible parameters This requires that every parameter is assignable from the given parameter types. This is a more flexible search than the normal exact matching algorithm.

First it checks if there is a constructor matching the exact signature. If not then all the constructors of the class are checked to see if their signatures are assignment compatible with the parameter types. The first assignment compatible matching constructor is returned.

Type Parameters:
T - the constructor type
Parameters:
cls - the class to find a constructor for, not null
parameterTypes - find method with compatible parameters
Returns:
the constructor, null if no matching accessible constructor found


Copyright © 2001-2011 The Apache Software Foundation. All Rights Reserved.