Class ReflectionUtils


  • public final class ReflectionUtils
    extends java.lang.Object
    Reflection utility methods. This class is intended for internal use only. All public methods (except asRandomizer(java.util.function.Supplier) might change between minor versions without notice.
    Author:
    Mahmoud Ben Hassine ([email protected])
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static <T> Randomizer<T> asRandomizer​(java.util.function.Supplier<T> supplier)
      Create a dynamic proxy that adapts the given Supplier to a Randomizer.
      static java.util.Collection<?> createEmptyCollectionForType​(java.lang.Class<?> fieldType, int initialSize)
      Create an empty collection for the given type.
      static java.util.List<java.lang.Class<?>> filterSameParameterizedTypes​(java.util.List<java.lang.Class<?>> types, java.lang.reflect.Type type)
      Filters a list of types to keep only elements having the same parameterized types as the given type.
      static <T extends java.lang.annotation.Annotation>
      T
      getAnnotation​(java.lang.reflect.Field field, java.lang.Class<T> annotationType)
      Looks for given annotationType on given field or read method for field.
      static <T> java.util.List<java.lang.reflect.Field> getDeclaredFields​(T type)
      Get declared fields of a given type.
      static java.util.Collection<?> getEmptyImplementationForCollectionInterface​(java.lang.Class<?> collectionInterface)
      Return an empty implementation for a Collection type.
      static java.util.Map<?,​?> getEmptyImplementationForMapInterface​(java.lang.Class<?> mapInterface)
      Return an empty implementation for the given Map interface.
      static java.lang.Object getFieldValue​(java.lang.Object object, java.lang.reflect.Field field)
      Get the value (accessible or not accessible) of a field of a target object.
      static java.util.List<java.lang.reflect.Field> getInheritedFields​(java.lang.Class<?> type)
      Get inherited fields of a given type.
      static <T> java.util.List<java.lang.Class<?>> getPublicConcreteSubTypesOf​(java.lang.Class<T> type)
      Searches the classpath for all public concrete subtypes of the given interface or abstract class.
      static java.util.Optional<java.lang.reflect.Method> getReadMethod​(java.lang.reflect.Field field)
      Get the read method for given field.
      static java.lang.Class<?> getWrapperType​(java.lang.Class<?> primitiveType)
      Get wrapper type of a primitive type.
      static java.util.Optional<java.lang.reflect.Method> getWriteMethod​(java.lang.reflect.Field field)
      Get the write method for given field.
      static <T> boolean isAbstract​(java.lang.Class<T> type)
      Check if the type is abstract (either an interface or an abstract class).
      static boolean isAnnotationPresent​(java.lang.reflect.Field field, java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
      Checks if field or corresponding read method is annotated with given annotationType.
      static boolean isArrayType​(java.lang.Class<?> type)
      Check if a type is an array type.
      static boolean isCollectionType​(java.lang.Class<?> type)
      Check if a type is a collection type.
      static boolean isCollectionType​(java.lang.reflect.Type type)
      Check if a type is a collection type.
      static boolean isEnumType​(java.lang.Class<?> type)
      Check if a type is an enum type.
      static boolean isInterface​(java.lang.Class<?> type)
      Check if a type is an interface.
      static boolean isIntrospectable​(java.lang.Class<?> type)
      Check if a type should be introspected for internal fields.
      static boolean isJdkBuiltIn​(java.lang.Class<?> type)
      Check if a type is a JDK built-in collection/map.
      static boolean isMapType​(java.lang.Class<?> type)
      Check if a type is a map type.
      static boolean isOptionalType​(java.lang.Class<?> type)
      Check if a type is Optional.
      static boolean isParameterizedType​(java.lang.reflect.Type type)
      Check if a type is a parameterized type
      static boolean isPopulatable​(java.lang.reflect.Type type)
      Check if a type is populatable.
      static boolean isPrimitiveFieldWithDefaultValue​(java.lang.Object object, java.lang.reflect.Field field)
      Check if a field has a primitive type and matching default value which is set by the compiler.
      static <T> boolean isPublic​(java.lang.Class<T> type)
      Check if the type is public.
      static boolean isStatic​(java.lang.reflect.Field field)
      Check if a field is static.
      static boolean isTypeVariable​(java.lang.reflect.Type type)
      Check if a type is a type variable
      static boolean isWildcardType​(java.lang.reflect.Type type)
      Check if a type is a wildcard type
      static <T> Randomizer<T> newInstance​(java.lang.Class<T> type, RandomizerArgument[] randomizerArguments)  
      static void setFieldValue​(java.lang.Object object, java.lang.reflect.Field field, java.lang.Object value)
      Set a value (accessible or not accessible) in a field of a target object.
      static void setProperty​(java.lang.Object object, java.lang.reflect.Field field, java.lang.Object value)
      Set a value in a field of a target object.
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Method Detail

      • asRandomizer

        public static <T> Randomizer<T> asRandomizer​(java.util.function.Supplier<T> supplier)
        Create a dynamic proxy that adapts the given Supplier to a Randomizer.
        Type Parameters:
        T - target type
        Parameters:
        supplier - to adapt
        Returns:
        the proxy randomizer
      • getDeclaredFields

        public static <T> java.util.List<java.lang.reflect.Field> getDeclaredFields​(T type)
        Get declared fields of a given type.
        Type Parameters:
        T - the actual type to introspect
        Parameters:
        type - the type to introspect
        Returns:
        list of declared fields
      • getInheritedFields

        public static java.util.List<java.lang.reflect.Field> getInheritedFields​(java.lang.Class<?> type)
        Get inherited fields of a given type.
        Parameters:
        type - the type to introspect
        Returns:
        list of inherited fields
      • setProperty

        public static void setProperty​(java.lang.Object object,
                                       java.lang.reflect.Field field,
                                       java.lang.Object value)
                                throws java.lang.IllegalAccessException,
                                       java.lang.reflect.InvocationTargetException
        Set a value in a field of a target object. If the target object provides a setter for the field, this setter will be used. Otherwise, the field will be set using reflection.
        Parameters:
        object - instance to set the property on
        field - field to set the property on
        value - value to set
        Throws:
        java.lang.IllegalAccessException - if the property cannot be set
        java.lang.reflect.InvocationTargetException
      • setFieldValue

        public static void setFieldValue​(java.lang.Object object,
                                         java.lang.reflect.Field field,
                                         java.lang.Object value)
                                  throws java.lang.IllegalAccessException
        Set a value (accessible or not accessible) in a field of a target object.
        Parameters:
        object - instance to set the property on
        field - field to set the property on
        value - value to set
        Throws:
        java.lang.IllegalAccessException - if the property cannot be set
      • getFieldValue

        public static java.lang.Object getFieldValue​(java.lang.Object object,
                                                     java.lang.reflect.Field field)
                                              throws java.lang.IllegalAccessException
        Get the value (accessible or not accessible) of a field of a target object.
        Parameters:
        object - instance to get the field of
        field - field to get the value of
        Returns:
        the value of the field
        Throws:
        java.lang.IllegalAccessException - if field cannot be accessed
      • getWrapperType

        public static java.lang.Class<?> getWrapperType​(java.lang.Class<?> primitiveType)
        Get wrapper type of a primitive type.
        Parameters:
        primitiveType - to get its wrapper type
        Returns:
        the wrapper type of the given primitive type
      • isPrimitiveFieldWithDefaultValue

        public static boolean isPrimitiveFieldWithDefaultValue​(java.lang.Object object,
                                                               java.lang.reflect.Field field)
                                                        throws java.lang.IllegalAccessException
        Check if a field has a primitive type and matching default value which is set by the compiler.
        Parameters:
        object - instance to get the field value of
        field - field to check
        Returns:
        true if the field is primitive and is set to the default value, false otherwise
        Throws:
        java.lang.IllegalAccessException - if field cannot be accessed
      • isStatic

        public static boolean isStatic​(java.lang.reflect.Field field)
        Check if a field is static.
        Parameters:
        field - the field to check
        Returns:
        true if the field is static, false otherwise
      • isInterface

        public static boolean isInterface​(java.lang.Class<?> type)
        Check if a type is an interface.
        Parameters:
        type - the type to check
        Returns:
        true if the type is an interface, false otherwise
      • isAbstract

        public static <T> boolean isAbstract​(java.lang.Class<T> type)
        Check if the type is abstract (either an interface or an abstract class).
        Type Parameters:
        T - the actual type to check
        Parameters:
        type - the type to check
        Returns:
        true if the type is abstract, false otherwise
      • isPublic

        public static <T> boolean isPublic​(java.lang.Class<T> type)
        Check if the type is public.
        Type Parameters:
        T - the actual type to check
        Parameters:
        type - the type to check
        Returns:
        true if the type is public, false otherwise
      • isArrayType

        public static boolean isArrayType​(java.lang.Class<?> type)
        Check if a type is an array type.
        Parameters:
        type - the type to check.
        Returns:
        true if the type is an array type, false otherwise.
      • isEnumType

        public static boolean isEnumType​(java.lang.Class<?> type)
        Check if a type is an enum type.
        Parameters:
        type - the type to check.
        Returns:
        true if the type is an enum type, false otherwise.
      • isCollectionType

        public static boolean isCollectionType​(java.lang.Class<?> type)
        Check if a type is a collection type.
        Parameters:
        type - the type to check.
        Returns:
        true if the type is a collection type, false otherwise
      • isCollectionType

        public static boolean isCollectionType​(java.lang.reflect.Type type)
        Check if a type is a collection type.
        Parameters:
        type - the type to check.
        Returns:
        true if the type is a collection type, false otherwise
      • isPopulatable

        public static boolean isPopulatable​(java.lang.reflect.Type type)
        Check if a type is populatable.
        Parameters:
        type - the type to check
        Returns:
        true if the type is populatable, false otherwise
      • isIntrospectable

        public static boolean isIntrospectable​(java.lang.Class<?> type)
        Check if a type should be introspected for internal fields.
        Parameters:
        type - the type to check
        Returns:
        true if the type should be introspected, false otherwise
      • isMapType

        public static boolean isMapType​(java.lang.Class<?> type)
        Check if a type is a map type.
        Parameters:
        type - the type to check
        Returns:
        true if the type is a map type, false otherwise.
      • isOptionalType

        public static boolean isOptionalType​(java.lang.Class<?> type)
        Check if a type is Optional.
        Parameters:
        type - the type to check
        Returns:
        true if the type is Optional, false otherwise.
      • isJdkBuiltIn

        public static boolean isJdkBuiltIn​(java.lang.Class<?> type)
        Check if a type is a JDK built-in collection/map.
        Parameters:
        type - the type to check
        Returns:
        true if the type is a built-in collection/map type, false otherwise.
      • isParameterizedType

        public static boolean isParameterizedType​(java.lang.reflect.Type type)
        Check if a type is a parameterized type
        Parameters:
        type - the type to check
        Returns:
        true if the type is parameterized, false otherwise
      • isWildcardType

        public static boolean isWildcardType​(java.lang.reflect.Type type)
        Check if a type is a wildcard type
        Parameters:
        type - the type to check
        Returns:
        true if the type is a wildcard type, false otherwise
      • isTypeVariable

        public static boolean isTypeVariable​(java.lang.reflect.Type type)
        Check if a type is a type variable
        Parameters:
        type - the type to check
        Returns:
        true if the type is a type variable, false otherwise
      • getPublicConcreteSubTypesOf

        public static <T> java.util.List<java.lang.Class<?>> getPublicConcreteSubTypesOf​(java.lang.Class<T> type)
        Searches the classpath for all public concrete subtypes of the given interface or abstract class.
        Type Parameters:
        T - the actual type to introspect
        Parameters:
        type - to search concrete subtypes of
        Returns:
        a list of all concrete subtypes found
      • filterSameParameterizedTypes

        public static java.util.List<java.lang.Class<?>> filterSameParameterizedTypes​(java.util.List<java.lang.Class<?>> types,
                                                                                      java.lang.reflect.Type type)
        Filters a list of types to keep only elements having the same parameterized types as the given type.
        Parameters:
        type - the type to use for the search
        types - a list of types to filter
        Returns:
        a list of types having the same parameterized types as the given type
      • getAnnotation

        public static <T extends java.lang.annotation.Annotation> T getAnnotation​(java.lang.reflect.Field field,
                                                                                  java.lang.Class<T> annotationType)
        Looks for given annotationType on given field or read method for field.
        Type Parameters:
        T - the actual type of annotation
        Parameters:
        field - field to check
        annotationType - Type of annotation you're looking for.
        Returns:
        given annotation if field or read method has this annotation or null.
      • isAnnotationPresent

        public static boolean isAnnotationPresent​(java.lang.reflect.Field field,
                                                  java.lang.Class<? extends java.lang.annotation.Annotation> annotationType)
        Checks if field or corresponding read method is annotated with given annotationType.
        Parameters:
        field - Field to check
        annotationType - Annotation you're looking for.
        Returns:
        true if field or read method it annotated with given annotationType or false.
      • getEmptyImplementationForCollectionInterface

        public static java.util.Collection<?> getEmptyImplementationForCollectionInterface​(java.lang.Class<?> collectionInterface)
        Return an empty implementation for a Collection type.
        Parameters:
        collectionInterface - for which an empty implementation should be returned
        Returns:
        empty implementation for the collection interface
      • createEmptyCollectionForType

        public static java.util.Collection<?> createEmptyCollectionForType​(java.lang.Class<?> fieldType,
                                                                           int initialSize)
        Create an empty collection for the given type.
        Parameters:
        fieldType - for which an empty collection should we created
        initialSize - initial size of the collection
        Returns:
        empty collection
      • getEmptyImplementationForMapInterface

        public static java.util.Map<?,​?> getEmptyImplementationForMapInterface​(java.lang.Class<?> mapInterface)
        Return an empty implementation for the given Map interface.
        Parameters:
        mapInterface - for which an empty implementation should be returned
        Returns:
        empty implementation for the given Map interface.
      • getWriteMethod

        public static java.util.Optional<java.lang.reflect.Method> getWriteMethod​(java.lang.reflect.Field field)
        Get the write method for given field.
        Parameters:
        field - field to get the write method for
        Returns:
        Optional of write method or empty if field has no write method
      • getReadMethod

        public static java.util.Optional<java.lang.reflect.Method> getReadMethod​(java.lang.reflect.Field field)
        Get the read method for given field.
        Parameters:
        field - field to get the read method for.
        Returns:
        Optional of read method or empty if field has no read method