Class ReflectionUtils

java.lang.Object
org.jeasy.random.util.ReflectionUtils

public final class ReflectionUtils extends 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 Details

    • asRandomizer

      public static <T> Randomizer<T> asRandomizer(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> List<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 List<Field> getInheritedFields(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(Object object, Field field, Object value) throws IllegalAccessException, 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:
      IllegalAccessException - if the property cannot be set
      InvocationTargetException
    • setFieldValue

      public static void setFieldValue(Object object, Field field, Object value) throws 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:
      IllegalAccessException - if the property cannot be set
    • getFieldValue

      public static Object getFieldValue(Object object, Field field) throws 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:
      IllegalAccessException - if field cannot be accessed
    • getWrapperType

      public static Class<?> getWrapperType(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(Object object, Field field) throws 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:
      IllegalAccessException - if field cannot be accessed
    • isStatic

      public static boolean isStatic(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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(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> List<Class<?>> getPublicConcreteSubTypesOf(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 List<Class<?>> filterSameParameterizedTypes(List<Class<?>> types, 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 Annotation> T getAnnotation(Field field, 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(Field field, Class<? extends 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 Collection<?> getEmptyImplementationForCollectionInterface(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 Collection<?> createEmptyCollectionForType(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 Map<?,?> getEmptyImplementationForMapInterface(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 Optional<Method> getWriteMethod(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 Optional<Method> getReadMethod(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
    • newInstance

      public static <T> Randomizer<T> newInstance(Class<T> type, RandomizerArgument[] randomizerArguments)