public class ConstructorUtils
extends java.lang.Object
Utility reflection methods focussed on constructors, modelled after MethodUtils
.
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 privilages.
If this call fails then a warning will be logged and the method may fail.
Modifier and Type | Field and Description |
---|---|
private static java.lang.Class<?>[] |
EMPTY_CLASS_PARAMETERS
An empty class array
|
private static java.lang.Object[] |
EMPTY_OBJECT_ARRAY
An empty object array
|
Constructor and Description |
---|
ConstructorUtils() |
Modifier and Type | Method and Description |
---|---|
static <T> java.lang.reflect.Constructor<T> |
getAccessibleConstructor(java.lang.Class<T> klass,
java.lang.Class<?> parameterType)
Returns a constructor with single argument.
|
static <T> java.lang.reflect.Constructor<T> |
getAccessibleConstructor(java.lang.Class<T> klass,
java.lang.Class<?>[] parameterTypes)
Returns a constructor given a class and signature.
|
static <T> java.lang.reflect.Constructor<T> |
getAccessibleConstructor(java.lang.reflect.Constructor<T> ctor)
Returns accessible version of the given constructor.
|
private static <T> java.lang.reflect.Constructor<T> |
getMatchingAccessibleConstructor(java.lang.Class<T> clazz,
java.lang.Class<?>[] parameterTypes)
Find an accessible constructor with compatible parameters.
|
static <T> T |
invokeConstructor(java.lang.Class<T> klass,
java.lang.Object arg)
Convenience method returning new instance of
klazz using a single argument constructor. |
static <T> T |
invokeConstructor(java.lang.Class<T> klass,
java.lang.Object[] args)
Returns new instance of
klazz created using the actual arguments args . |
static <T> T |
invokeConstructor(java.lang.Class<T> klass,
java.lang.Object[] args,
java.lang.Class<?>[] parameterTypes)
Returns new instance of
klazz created using constructor
with signature parameterTypes and actual arguments args . |
static <T> T |
invokeExactConstructor(java.lang.Class<T> klass,
java.lang.Object arg)
Convenience method returning new instance of
klazz using a single argument constructor. |
static <T> T |
invokeExactConstructor(java.lang.Class<T> klass,
java.lang.Object[] args)
Returns new instance of
klazz created using the actual arguments args . |
static <T> T |
invokeExactConstructor(java.lang.Class<T> klass,
java.lang.Object[] args,
java.lang.Class<?>[] parameterTypes)
Returns new instance of
klazz created using constructor
with signature parameterTypes and actual arguments
args . |
private static java.lang.Object[] |
toArray(java.lang.Object arg) |
private static final java.lang.Class<?>[] EMPTY_CLASS_PARAMETERS
private static final java.lang.Object[] EMPTY_OBJECT_ARRAY
public static <T> T invokeConstructor(java.lang.Class<T> klass, java.lang.Object arg) throws java.lang.NoSuchMethodException, java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException, java.lang.InstantiationException
Convenience method returning new instance of klazz
using a single argument constructor.
The formal parameter type is inferred from the actual values of arg
.
See invokeExactConstructor(Class, Object[], Class[])
for more details.
The signatures should be assignment compatible.
T
- the type of the object to be constructedklass
- the class to be constructed.arg
- the actual argument. May be null (this will result in calling the default constructor).klazz
java.lang.NoSuchMethodException
- If the constructor cannot be foundjava.lang.IllegalAccessException
- If an error occurs accessing the constructorjava.lang.reflect.InvocationTargetException
- If an error occurs invoking the constructorjava.lang.InstantiationException
- If an error occurs instantiating the classinvokeConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
public static <T> T invokeConstructor(java.lang.Class<T> klass, java.lang.Object[] args) throws java.lang.NoSuchMethodException, java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException, java.lang.InstantiationException
Returns new instance of klazz
created using the actual arguments args
.
The formal parameter types are inferred from the actual values of args
.
See invokeExactConstructor(Class, Object[], Class[])
for more details.
The signatures should be assignment compatible.
T
- the type of the object to be constructedklass
- the class to be constructed.args
- actual argument array. May be null (this will result in calling the default constructor).klazz
java.lang.NoSuchMethodException
- If the constructor cannot be foundjava.lang.IllegalAccessException
- If an error occurs accessing the constructorjava.lang.reflect.InvocationTargetException
- If an error occurs invoking the constructorjava.lang.InstantiationException
- If an error occurs instantiating the classinvokeConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
public static <T> T invokeConstructor(java.lang.Class<T> klass, java.lang.Object[] args, java.lang.Class<?>[] parameterTypes) throws java.lang.NoSuchMethodException, java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException, java.lang.InstantiationException
Returns new instance of klazz
created using constructor
with signature parameterTypes
and actual arguments args
.
The signatures should be assignment compatible.
T
- the type of the object to be constructedklass
- the class to be constructed.args
- actual argument array. May be null (this will result in calling the default constructor).parameterTypes
- parameter types arrayklazz
java.lang.NoSuchMethodException
- if matching constructor cannot be foundjava.lang.IllegalAccessException
- thrown on the constructor's invocationjava.lang.reflect.InvocationTargetException
- thrown on the constructor's invocationjava.lang.InstantiationException
- thrown on the constructor's invocationConstructor.newInstance(java.lang.Object...)
public static <T> T invokeExactConstructor(java.lang.Class<T> klass, java.lang.Object arg) throws java.lang.NoSuchMethodException, java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException, java.lang.InstantiationException
Convenience method returning new instance of klazz
using a single argument constructor.
The formal parameter type is inferred from the actual values of arg
.
See invokeExactConstructor(Class, Object[], Class[])
for more details.
The signatures should match exactly.
T
- the type of the object to be constructedklass
- the class to be constructed.arg
- the actual argument. May be null (this will result in calling the default constructor).klazz
java.lang.NoSuchMethodException
- If the constructor cannot be foundjava.lang.IllegalAccessException
- If an error occurs accessing the constructorjava.lang.reflect.InvocationTargetException
- If an error occurs invoking the constructorjava.lang.InstantiationException
- If an error occurs instantiating the classinvokeExactConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
public static <T> T invokeExactConstructor(java.lang.Class<T> klass, java.lang.Object[] args) throws java.lang.NoSuchMethodException, java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException, java.lang.InstantiationException
Returns new instance of klazz
created using the actual arguments args
.
The formal parameter types are inferred from the actual values of args
.
See invokeExactConstructor(Class, Object[], Class[])
for more details.
The signatures should match exactly.
T
- the type of the object to be constructedklass
- the class to be constructed.args
- actual argument array. May be null (this will result in calling the default constructor).klazz
java.lang.NoSuchMethodException
- If the constructor cannot be foundjava.lang.IllegalAccessException
- If an error occurs accessing the constructorjava.lang.reflect.InvocationTargetException
- If an error occurs invoking the constructorjava.lang.InstantiationException
- If an error occurs instantiating the classinvokeExactConstructor(java.lang.Class, java.lang.Object[], java.lang.Class[])
public static <T> T invokeExactConstructor(java.lang.Class<T> klass, java.lang.Object[] args, java.lang.Class<?>[] parameterTypes) throws java.lang.NoSuchMethodException, java.lang.IllegalAccessException, java.lang.reflect.InvocationTargetException, java.lang.InstantiationException
Returns new instance of klazz
created using constructor
with signature parameterTypes
and actual arguments
args
.
The signatures should match exactly.
T
- the type of the object to be constructedklass
- the class to be constructed.args
- actual argument array. May be null (this will result in calling the default constructor).parameterTypes
- parameter types arrayklazz
java.lang.NoSuchMethodException
- if matching constructor cannot be foundjava.lang.IllegalAccessException
- thrown on the constructor's invocationjava.lang.reflect.InvocationTargetException
- thrown on the constructor's invocationjava.lang.InstantiationException
- thrown on the constructor's invocationConstructor.newInstance(java.lang.Object...)
public static <T> java.lang.reflect.Constructor<T> getAccessibleConstructor(java.lang.Class<T> klass, java.lang.Class<?> parameterType)
T
- the type of the constructorklass
- the class to be constructedparameterType
- The constructor parameter typeClass.getConstructor(java.lang.Class<?>...)
,
getAccessibleConstructor(java.lang.reflect.Constructor)
public static <T> java.lang.reflect.Constructor<T> getAccessibleConstructor(java.lang.Class<T> klass, java.lang.Class<?>[] parameterTypes)
T
- the type to be constructedklass
- the class to be constructedparameterTypes
- the parameter arrayClass.getConstructor(java.lang.Class<?>...)
,
getAccessibleConstructor(java.lang.reflect.Constructor)
public static <T> java.lang.reflect.Constructor<T> getAccessibleConstructor(java.lang.reflect.Constructor<T> ctor)
T
- the type of the constructorctor
- prototype constructor object.null
if accessible constructor can not be found.SecurityManager
private static java.lang.Object[] toArray(java.lang.Object arg)
private static <T> java.lang.reflect.Constructor<T> getMatchingAccessibleConstructor(java.lang.Class<T> clazz, java.lang.Class<?>[] parameterTypes)
Find an accessible constructor with compatible parameters. Compatible parameters mean that every method parameter is assignable from the given parameters. In other words, it finds constructor that will take the parameters given.
First it checks if there is constructor matching the exact signature. If no such, all the constructors of the class are tested if their signatures are assignment compatible with the parameter types. The first matching constructor is returned.
T
- the type of the class to be inspectedclazz
- find constructor for this classparameterTypes
- find method with compatible parametersnull
.Copyright (c) 2000-2008 - Apache Software Foundation