Class ReflectionUtils

java.lang.Object
org.axonframework.common.ReflectionUtils

public abstract class ReflectionUtils extends Object
Utility class for working with Java Reflection API.
Since:
0.7
Author:
Allard Buijze
  • Field Details

    • RECURSIVE

      public static final boolean RECURSIVE
      Specifying a reflection operation should be performed recursive.
      See Also:
    • NOT_RECURSIVE

      public static final boolean NOT_RECURSIVE
      Specifying a reflection operation should not be performed recursive.
      See Also:
  • Method Details

    • getFieldValue

      public static <R> R getFieldValue(Field field, Object object)
      Returns the value of the given field in the given object. If necessary, the field is made accessible, assuming the security manager allows it.
      Parameters:
      field - The field containing the value
      object - The object to retrieve the field's value from
      Returns:
      the value of the field in the object
      Throws:
      IllegalStateException - if the field is not accessible and the security manager doesn't allow it to be made accessible
    • setFieldValue

      public static <T> void setFieldValue(Field field, Object object, T value)
      Set the field of object to a certain value. If necessary, the field is made accessible, assuming the security manager allows it.
      Type Parameters:
      T - The type of the value
      Parameters:
      field - The field to set value on
      object - The object to set the value on field
      value - The value to set on field
    • declaringClass

      public static Class<?> declaringClass(Class<?> instanceClass, String methodName, Class<?>... parameterTypes)
      Returns the class on which the method with given methodName and parameters of type parameterTypes is declared. The given instanceClass is the instance on which the method can be called. If the method is not available on the given instanceClass, null is returned.
      Parameters:
      instanceClass - The class on which to look for the method
      methodName - The name of the method
      parameterTypes - The parameter types of the method
      Returns:
      The class on which the method is declared, or null if not found
    • hasEqualsMethod

      public static boolean hasEqualsMethod(Class<?> type)
      Indicates whether the given class implements a customized equals method. This methods returns true if the declaring type of the equals method is not Object.
      Parameters:
      type - The type to inspect
      Returns:
      true if the given type overrides the equals method, otherwise false
    • explicitlyUnequal

      public static boolean explicitlyUnequal(Object value, Object otherValue)
      Indicates whether the two given objects are not the same, override an equals method that indicates they are not equal, or implements Comparable which indicates the two are not equal. If this method cannot safely indicate two objects are not equal, it returns false.
      Parameters:
      value - One of the values to compare
      otherValue - other value to compare
      Returns:
      true if these objects explicitly indicate they are not equal, false otherwise.
    • ensureAccessible

      public static <T extends AccessibleObject> T ensureAccessible(T member)
      Makes the given member accessible via reflection if it is not the case already.
      Type Parameters:
      T - The type of member to make accessible
      Parameters:
      member - The member (field, method, constructor, etc) to make accessible
      Returns:
      the given member, for easier method chaining
      Throws:
      IllegalStateException - if the member is not accessible and the security manager doesn't allow it to be made accessible
    • isAccessible

      public static boolean isAccessible(AccessibleObject member)
      Indicates whether the given member is accessible. It does so by checking whether the member is non-final and public, or made accessible via reflection.
      Parameters:
      member - The member (field, method, constructor, etc) to check for accessibility
      Returns:
      true if the member is accessible, otherwise false.
    • isNonFinalPublicMember

      public static boolean isNonFinalPublicMember(Member member)
      Checks whether the given member is public and non-final. These members do no need to be set accessible using reflection.
      Parameters:
      member - The member to check
      Returns:
      true if the member is public and non-final, otherwise false.
      See Also:
    • fieldsOf

      public static Iterable<Field> fieldsOf(Class<?> clazz)
      Returns an Iterable of all the fields declared on the given class and its super classes. The iterator will always return fields declared in a subtype before returning fields declared in a super type.
      Parameters:
      clazz - the class to return fields for
      Returns:
      an Iterable providing access to all declared fields in the class hierarchy
    • fieldsOf

      public static Iterable<Field> fieldsOf(Class<?> clazz, boolean recursive)
      Returns an Iterable of all the fields declared on the given class.

      Will include the given clazz' super classes if recursive has been set. The iterator will always return fields declared in a subtype before returning fields declared in a super type.

      Parameters:
      clazz - the class to return fields for
      recursive - defining whether fields should be found recursively on super classes as well
      Returns:
      an Iterable providing access to all declared fields in the class, including the hierarchy if recursive was set
    • methodOf

      public static Method methodOf(Class<?> clazz, String methodName, Class<?>... parameterTypes) throws NoSuchMethodException
      Utility function which returns a Method matching the given methodName and parameterTypes in the clazz.
      Parameters:
      clazz - The Class to return a method for
      methodName - A String for the simple name of the method to return
      parameterTypes - An array of type Class for all the parameters which are part of the Method being searched for
      Returns:
      a Method object from the given clazz matching the specified methodName
      Throws:
      NoSuchMethodException - if no Method can be found matching the methodName in clazz
    • methodsOf

      public static Iterable<Method> methodsOf(Class<?> clazz)
      Returns an Iterable of all the methods declared on the given class and its super classes. The iterator will always return methods declared in a subtype before returning methods declared in a super type.
      Parameters:
      clazz - the class to return methods for
      Returns:
      an Iterable providing access to all declared methods in the class hierarchy
    • methodsOf

      public static Iterable<Method> methodsOf(Class<?> clazz, boolean recursive)
      Returns an Iterable of all the methods declared on the given class.

      Will include the given clazz' super classes if recursive has been set. The iterator will always return fields declared in a subtype before returning fields declared in a super type.

      Parameters:
      clazz - the class to return methods for
      recursive - defining whether methods should be found recursively on super classes as well
      Returns:
      an Iterable providing access to all declared methods in the class, including the hierarchy if recursive was set
    • resolvePrimitiveWrapperType

      public static Class<?> resolvePrimitiveWrapperType(Class<?> primitiveType)
      Returns the boxed wrapper type for the given primitiveType.
      Parameters:
      primitiveType - The primitive type to return boxed wrapper type for
      Returns:
      the boxed wrapper type for the given primitiveType
      Throws:
      IllegalArgumentException - will be thrown instead of returning null if no wrapper class was found.
    • resolvePrimitiveWrapperTypeIfPrimitive

      public static Type resolvePrimitiveWrapperTypeIfPrimitive(Type type)
      Returns the boxed wrapper type for the given type if it is primitive.
      Parameters:
      type - a Type to return boxed wrapper type for
      Returns:
      the boxed wrapper type for the give type, or type if no wrapper class was found.
    • unwrapIfType

      public static Type unwrapIfType(Type type, Class<?>... wrapperTypes)
      Unwrap the given type if is wrapped by any of the given wrapperTypes. This method assumes that the wrapperTypes have a single generic argument, which identifies the type they wrap.

      For example, if invoked with Future.class and Optional.class as wrapperTypes:

      • Future<String> resolves to String
      • Optional<String> resolves to String
      • Optional<Future<List<String>>> resolves to List<String>
      Parameters:
      type - The type to unwrap, if wrapped
      wrapperTypes - The wrapper types to unwrap
      Returns:
      the unwrapped Type, or the original if it wasn't wrapped in any of the given wrapper types
    • isTransient

      public static boolean isTransient(Field field)
      Indicates whether the given field has the "transient" modifier
      Parameters:
      field - the field to inspect
      Returns:
      true if the field is marked transient, otherwise false
    • resolveGenericType

      public static Optional<Class<?>> resolveGenericType(Field field, int genericTypeIndex)
      Resolve a generic type parameter from a field declaration
      Parameters:
      field - The field to find generic parameters for
      genericTypeIndex - The index of the type
      Returns:
      an optional that contains the resolved type, if found
    • resolveMemberGenericType

      public static Optional<Class<?>> resolveMemberGenericType(Member member, int genericTypeIndex)
      Resolve a generic type parameter from a member declaration.
      Parameters:
      member - the member to find generic parameters for
      genericTypeIndex - the index of the type
      Returns:
      an optional that contains the resolved type, if found
    • invokeAndGetMethodValue

      public static <R> R invokeAndGetMethodValue(Method method, Object object)
      Invokes and returns the return value of the given method in the given object. If necessary, the method is made accessible, assuming the security manager allows it.
      Parameters:
      method - the method to invoke
      object - the target object the given method is invoked on
      Returns:
      the resulting value of invocation of the method in the object
      Throws:
      IllegalStateException - if the method is not accessible and the security manager doesn't allow it to be made accessible
    • getMemberValue

      public static <R> R getMemberValue(Member member, Object target)
      Returns the value of the given member in the given object, either by returning Field value or invoking the method. If necessary, the member is made accessible, assuming the security manager allows it. Supported members are Field and non-void Method without parameters.
      Parameters:
      member - the member containing or returning the value
      target - the object to retrieve the member's value from
      Returns:
      the value of the member in the object
      Throws:
      IllegalStateException - if the member is not supported
    • getMemberValueType

      public static Class<?> getMemberValueType(Member member)
      Returns the type of value of the given member, either by returning the type of Field or type of the return value of a Method.
      Parameters:
      member - the member to get the value type from
      Returns:
      the type of value of the member
      Throws:
      IllegalStateException - if the member is not supported
    • getMemberGenericType

      public static Type getMemberGenericType(Member member)
      Returns the generic type of value of the given member, either by returning the generic type of Field or generic return type of a Method.
      Parameters:
      member - the member to get generic type of
      Returns:
      the generic type of value of the member
      Throws:
      IllegalStateException - if the member is not supported
    • getMemberGenericString

      public static String getMemberGenericString(Member member)
      Returns the generic string of the given member.
      Parameters:
      member - the member to get the generic string for
      Returns:
      the generic string of the member
      Throws:
      IllegalStateException - if the member is not supported
    • toDiscernibleSignature

      public static String toDiscernibleSignature(Executable executable)
      Returns a discernible signature without including the classname. This will contain the method name and the parameter types, such as: thisIfMyMethod(java.lang.String myString, com.acme.MyGreatObject).
      Parameters:
      executable - The executable to make a signature of.
      Returns:
      The discernible signature.