@ -29,9 +29,9 @@ import java.util.List;
@@ -29,9 +29,9 @@ import java.util.List;
/ * *
* Simple utility class for working with the reflection API and handling
* reflection exceptions .
* < p >
* Only intended for internal use .
*
*
* < p > Only intended for internal use .
*
* @author Juergen Hoeller
* @author Rob Harrop
* @author Rod Johnson
@ -45,7 +45,6 @@ public abstract class ReflectionUtils {
@@ -45,7 +45,6 @@ public abstract class ReflectionUtils {
* Attempt to find a { @link Field field } on the supplied { @link Class } with
* the supplied < code > name < / code > . Searches all superclasses up to
* { @link Object } .
*
* @param clazz the class to introspect
* @param name the name of the field
* @return the corresponding Field object , or < code > null < / code > if not found
@ -58,7 +57,6 @@ public abstract class ReflectionUtils {
@@ -58,7 +57,6 @@ public abstract class ReflectionUtils {
* Attempt to find a { @link Field field } on the supplied { @link Class } with
* the supplied < code > name < / code > and / or { @link Class type } . Searches all
* superclasses up to { @link Object } .
*
* @param clazz the class to introspect
* @param name the name of the field ( may be < code > null < / code > if type is
* specified )
@ -88,10 +86,8 @@ public abstract class ReflectionUtils {
@@ -88,10 +86,8 @@ public abstract class ReflectionUtils {
* < code > value < / code > . In accordance with { @link Field # set ( Object , Object ) }
* semantics , the new value is automatically unwrapped if the underlying
* field has a primitive type .
* < p >
* Thrown exceptions are handled via a call to
* < p > Thrown exceptions are handled via a call to
* { @link # handleReflectionException ( Exception ) } .
*
* @param field the field to set
* @param target the target object on which to set the field
* @param value the value to set ; may be < code > null < / code >
@ -112,10 +108,8 @@ public abstract class ReflectionUtils {
@@ -112,10 +108,8 @@ public abstract class ReflectionUtils {
* the specified { @link Object target object } . In accordance with
* { @link Field # get ( Object ) } semantics , the returned value is automatically
* wrapped if the underlying field has a primitive type .
* < p >
* Thrown exceptions are handled via a call to
* < p > Thrown exceptions are handled via a call to
* { @link # handleReflectionException ( Exception ) } .
*
* @param field the field to get
* @param target the target object from which to get the field
* @return the field ' s current value
@ -135,9 +129,7 @@ public abstract class ReflectionUtils {
@@ -135,9 +129,7 @@ public abstract class ReflectionUtils {
* Attempt to find a { @link Method } on the supplied class with the supplied
* name and no parameters . Searches all superclasses up to
* < code > Object < / code > .
* < p >
* Returns < code > null < / code > if no { @link Method } can be found .
*
* < p > Returns < code > null < / code > if no { @link Method } can be found .
* @param clazz the class to introspect
* @param name the name of the method
* @return the Method object , or < code > null < / code > if none found
@ -150,9 +142,7 @@ public abstract class ReflectionUtils {
@@ -150,9 +142,7 @@ public abstract class ReflectionUtils {
* Attempt to find a { @link Method } on the supplied class with the supplied
* name and parameter types . Searches all superclasses up to
* < code > Object < / code > .
* < p >
* Returns < code > null < / code > if no { @link Method } can be found .
*
* < p > Returns < code > null < / code > if no { @link Method } can be found .
* @param clazz the class to introspect
* @param name the name of the method
* @param paramTypes the parameter types of the method ( may be
@ -180,10 +170,8 @@ public abstract class ReflectionUtils {
@@ -180,10 +170,8 @@ public abstract class ReflectionUtils {
* Invoke the specified { @link Method } against the supplied target object
* with no arguments . The target object can be < code > null < / code > when
* invoking a static { @link Method } .
* < p >
* Thrown exceptions are handled via a call to
* < p > Thrown exceptions are handled via a call to
* { @link # handleReflectionException } .
*
* @param method the method to invoke
* @param target the target object to invoke the method on
* @return the invocation result , if any
@ -197,10 +185,8 @@ public abstract class ReflectionUtils {
@@ -197,10 +185,8 @@ public abstract class ReflectionUtils {
* Invoke the specified { @link Method } against the supplied target object
* with the supplied arguments . The target object can be < code > null < / code >
* when invoking a static { @link Method } .
* < p >
* Thrown exceptions are handled via a call to
* < p > Thrown exceptions are handled via a call to
* { @link # handleReflectionException } .
*
* @param method the method to invoke
* @param target the target object to invoke the method on
* @param args the invocation arguments ( may be < code > null < / code > )
@ -219,7 +205,6 @@ public abstract class ReflectionUtils {
@@ -219,7 +205,6 @@ public abstract class ReflectionUtils {
/ * *
* Invoke the specified JDBC API { @link Method } against the supplied target
* object with no arguments .
*
* @param method the method to invoke
* @param target the target object to invoke the method on
* @return the invocation result , if any
@ -233,7 +218,6 @@ public abstract class ReflectionUtils {
@@ -233,7 +218,6 @@ public abstract class ReflectionUtils {
/ * *
* Invoke the specified JDBC API { @link Method } against the supplied target
* object with the supplied arguments .
*
* @param method the method to invoke
* @param target the target object to invoke the method on
* @param args the invocation arguments ( may be < code > null < / code > )
@ -260,11 +244,9 @@ public abstract class ReflectionUtils {
@@ -260,11 +244,9 @@ public abstract class ReflectionUtils {
/ * *
* Handle the given reflection exception . Should only be called if no
* checked exception is expected to be thrown by the target method .
* < p >
* Throws the underlying RuntimeException or Error in case of an
* < p > Throws the underlying RuntimeException or Error in case of an
* InvocationTargetException with such a root cause . Throws an
* IllegalStateException with an appropriate message else .
*
* @param ex the reflection exception to handle
* /
public static void handleReflectionException ( Exception ex ) {
@ -286,10 +268,8 @@ public abstract class ReflectionUtils {
@@ -286,10 +268,8 @@ public abstract class ReflectionUtils {
/ * *
* Handle the given invocation target exception . Should only be called if no
* checked exception is expected to be thrown by the target method .
* < p >
* Throws the underlying RuntimeException or Error in case of such a root
* < p > Throws the underlying RuntimeException or Error in case of such a root
* cause . Throws an IllegalStateException else .
*
* @param ex the invocation target exception to handle
* /
public static void handleInvocationTargetException ( InvocationTargetException ex ) {
@ -301,11 +281,9 @@ public abstract class ReflectionUtils {
@@ -301,11 +281,9 @@ public abstract class ReflectionUtils {
* < em > target exception < / em > of an { @link InvocationTargetException } . Should
* only be called if no checked exception is expected to be thrown by the
* target method .
* < p >
* Rethrows the underlying exception cast to an { @link RuntimeException } or
* < p > Rethrows the underlying exception cast to an { @link RuntimeException } or
* { @link Error } if appropriate ; otherwise , throws an
* { @link IllegalStateException } .
*
* @param ex the exception to rethrow
* @throws RuntimeException the rethrown exception
* /
@ -324,11 +302,9 @@ public abstract class ReflectionUtils {
@@ -324,11 +302,9 @@ public abstract class ReflectionUtils {
* < em > target exception < / em > of an { @link InvocationTargetException } . Should
* only be called if no checked exception is expected to be thrown by the
* target method .
* < p >
* Rethrows the underlying exception cast to an { @link Exception } or
* < p > Rethrows the underlying exception cast to an { @link Exception } or
* { @link Error } if appropriate ; otherwise , throws an
* { @link IllegalStateException } .
*
* @param ex the exception to rethrow
* @throws Exception the rethrown exception ( in case of a checked exception )
* /
@ -344,7 +320,6 @@ public abstract class ReflectionUtils {
@@ -344,7 +320,6 @@ public abstract class ReflectionUtils {
/ * *
* Throws an IllegalStateException with the given exception as root cause .
*
* @param ex the unexpected exception
* /
private static void handleUnexpectedException ( Throwable ex ) {
@ -355,7 +330,6 @@ public abstract class ReflectionUtils {
@@ -355,7 +330,6 @@ public abstract class ReflectionUtils {
* Determine whether the given method explicitly declares the given
* exception or one of its superclasses , which means that an exception of
* that type can be propagated as - is within a reflective invocation .
*
* @param method the declaring method
* @param exceptionType the exception to throw
* @return < code > true < / code > if the exception can be thrown as - is ;
@ -374,7 +348,6 @@ public abstract class ReflectionUtils {
@@ -374,7 +348,6 @@ public abstract class ReflectionUtils {
/ * *
* Determine whether the given field is a "public static final" constant .
*
* @param field the field to check
* /
public static boolean isPublicStaticFinal ( Field field ) {
@ -384,8 +357,7 @@ public abstract class ReflectionUtils {
@@ -384,8 +357,7 @@ public abstract class ReflectionUtils {
/ * *
* Determine whether the given method is an "equals" method .
*
* @see java . lang . Object # equals
* @see java . lang . Object # equals ( Object )
* /
public static boolean isEqualsMethod ( Method method ) {
if ( method = = null | | ! method . getName ( ) . equals ( "equals" ) ) {
@ -397,8 +369,7 @@ public abstract class ReflectionUtils {
@@ -397,8 +369,7 @@ public abstract class ReflectionUtils {
/ * *
* Determine whether the given method is a "hashCode" method .
*
* @see java . lang . Object # hashCode
* @see java . lang . Object # hashCode ( )
* /
public static boolean isHashCodeMethod ( Method method ) {
return ( method ! = null & & method . getName ( ) . equals ( "hashCode" ) & & method . getParameterTypes ( ) . length = = 0 ) ;
@ -406,7 +377,6 @@ public abstract class ReflectionUtils {
@@ -406,7 +377,6 @@ public abstract class ReflectionUtils {
/ * *
* Determine whether the given method is a "toString" method .
*
* @see java . lang . Object # toString ( )
* /
public static boolean isToStringMethod ( Method method ) {
@ -418,7 +388,6 @@ public abstract class ReflectionUtils {
@@ -418,7 +388,6 @@ public abstract class ReflectionUtils {
* necessary . The < code > setAccessible ( true ) < / code > method is only called
* when actually necessary , to avoid unnecessary conflicts with a JVM
* SecurityManager ( if active ) .
*
* @param field the field to make accessible
* @see java . lang . reflect . Field # setAccessible
* /
@ -434,7 +403,6 @@ public abstract class ReflectionUtils {
@@ -434,7 +403,6 @@ public abstract class ReflectionUtils {
* necessary . The < code > setAccessible ( true ) < / code > method is only called
* when actually necessary , to avoid unnecessary conflicts with a JVM
* SecurityManager ( if active ) .
*
* @param method the method to make accessible
* @see java . lang . reflect . Method # setAccessible
* /
@ -450,7 +418,6 @@ public abstract class ReflectionUtils {
@@ -450,7 +418,6 @@ public abstract class ReflectionUtils {
* if necessary . The < code > setAccessible ( true ) < / code > method is only called
* when actually necessary , to avoid unnecessary conflicts with a JVM
* SecurityManager ( if active ) .
*
* @param ctor the constructor to make accessible
* @see java . lang . reflect . Constructor # setAccessible
* /
@ -464,10 +431,8 @@ public abstract class ReflectionUtils {
@@ -464,10 +431,8 @@ public abstract class ReflectionUtils {
/ * *
* Perform the given callback operation on all matching methods of the given
* class and superclasses .
* < p >
* The same named method occurring on subclass and superclass will appear
* < p > The same named method occurring on subclass and superclass will appear
* twice , unless excluded by a { @link MethodFilter } .
*
* @param targetClass class to start looking at
* @param mc the callback to invoke for each method
* @see # doWithMethods ( Class , MethodCallback , MethodFilter )
@ -479,10 +444,8 @@ public abstract class ReflectionUtils {
@@ -479,10 +444,8 @@ public abstract class ReflectionUtils {
/ * *
* Perform the given callback operation on all matching methods of the given
* class and superclasses .
* < p >
* The same named method occurring on subclass and superclass will appear
* < p > The same named method occurring on subclass and superclass will appear
* twice , unless excluded by the specified { @link MethodFilter } .
*
* @param targetClass class to start looking at
* @param mc the callback to invoke for each method
* @param mf the filter that determines the methods to apply the callback to
@ -516,7 +479,6 @@ public abstract class ReflectionUtils {
@@ -516,7 +479,6 @@ public abstract class ReflectionUtils {
public static Method [ ] getAllDeclaredMethods ( Class < ? > leafClass ) throws IllegalArgumentException {
final List < Method > methods = new ArrayList < Method > ( 32 ) ;
doWithMethods ( leafClass , new MethodCallback ( ) {
public void doWith ( Method method ) {
methods . add ( method ) ;
}
@ -527,7 +489,6 @@ public abstract class ReflectionUtils {
@@ -527,7 +489,6 @@ public abstract class ReflectionUtils {
/ * *
* Invoke the given callback on all fields in the target class , going up the
* class hierarchy to get all declared fields .
*
* @param targetClass the target class to analyze
* @param fc the callback to invoke for each field
* /
@ -538,7 +499,6 @@ public abstract class ReflectionUtils {
@@ -538,7 +499,6 @@ public abstract class ReflectionUtils {
/ * *
* Invoke the given callback on all fields in the target class , going up the
* class hierarchy to get all declared fields .
*
* @param targetClass the target class to analyze
* @param fc the callback to invoke for each field
* @param ff the filter that determines the fields to apply the callback to
@ -571,7 +531,6 @@ public abstract class ReflectionUtils {
@@ -571,7 +531,6 @@ public abstract class ReflectionUtils {
* Given the source object and the destination , which must be the same class
* or a subclass , copy all fields , including inherited fields . Designed to
* work on objects with public no - arg constructors .
*
* @throws IllegalArgumentException if the arguments are incompatible
* /
public static void shallowCopyFieldState ( final Object src , final Object dest ) throws IllegalArgumentException {
@ -603,21 +562,19 @@ public abstract class ReflectionUtils {
@@ -603,21 +562,19 @@ public abstract class ReflectionUtils {
/ * *
* Perform an operation using the given method .
*
* @param method the method to operate on
* /
void doWith ( Method method ) throws IllegalArgumentException , IllegalAccessException ;
}
/ * *
* Callback optionally used to method fields to be operated on by a method
* callback .
* Callback optionally used to method fields to be operated on by a method callback .
* /
public static interface MethodFilter {
/ * *
* Determine whether the given method matches .
*
* @param method the method to check
* /
boolean matches ( Method method ) ;
@ -630,21 +587,19 @@ public abstract class ReflectionUtils {
@@ -630,21 +587,19 @@ public abstract class ReflectionUtils {
/ * *
* Perform an operation using the given field .
*
* @param field the field to operate on
* /
void doWith ( Field field ) throws IllegalArgumentException , IllegalAccessException ;
}
/ * *
* Callback optionally used to filter fields to be operated on by a field
* callback .
* Callback optionally used to filter fields to be operated on by a field callback .
* /
public static interface FieldFilter {
/ * *
* Determine whether the given field matches .
*
* @param field the field to check
* /
boolean matches ( Field field ) ;