Package org.jeasy.random.util
Class ReflectionUtils
java.lang.Object
org.jeasy.random.util.ReflectionUtils
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
Modifier and TypeMethodDescriptionstatic <T> Randomizer<T>
asRandomizer
(Supplier<T> supplier) Create a dynamic proxy that adapts the givenSupplier
to aRandomizer
.static Collection<?>
createEmptyCollectionForType
(Class<?> fieldType, int initialSize) Create an empty collection for the given type.filterSameParameterizedTypes
(List<Class<?>> types, Type type) Filters a list of types to keep only elements having the same parameterized types as the given type.static <T extends Annotation>
TgetAnnotation
(Field field, Class<T> annotationType) Looks for given annotationType on given field or read method for field.getDeclaredFields
(T type) Get declared fields of a given type.static Collection<?>
getEmptyImplementationForCollectionInterface
(Class<?> collectionInterface) Return an empty implementation for aCollection
type.static Map<?,
?> getEmptyImplementationForMapInterface
(Class<?> mapInterface) Return an empty implementation for the givenMap
interface.static Object
getFieldValue
(Object object, Field field) Get the value (accessible or not accessible) of a field of a target object.getInheritedFields
(Class<?> type) Get inherited fields of a given type.getPublicConcreteSubTypesOf
(Class<T> type) Searches the classpath for all public concrete subtypes of the given interface or abstract class.getReadMethod
(Field field) Get the read method for given field.static Class<?>
getWrapperType
(Class<?> primitiveType) Get wrapper type of a primitive type.getWriteMethod
(Field field) Get the write method for given field.static <T> boolean
isAbstract
(Class<T> type) Check if the type is abstract (either an interface or an abstract class).static boolean
isAnnotationPresent
(Field field, Class<? extends Annotation> annotationType) Checks if field or corresponding read method is annotated with given annotationType.static boolean
isArrayType
(Class<?> type) Check if a type is an array type.static boolean
isCollectionType
(Class<?> type) Check if a type is a collection type.static boolean
isCollectionType
(Type type) Check if a type is a collection type.static boolean
isEnumType
(Class<?> type) Check if a type is an enum type.static boolean
isInterface
(Class<?> type) Check if a type is an interface.static boolean
isIntrospectable
(Class<?> type) Check if a type should be introspected for internal fields.static boolean
isJdkBuiltIn
(Class<?> type) Check if a type is a JDK built-in collection/map.static boolean
Check if a type is a map type.static boolean
isOptionalType
(Class<?> type) Check if a type isOptional
.static boolean
isParameterizedType
(Type type) Check if a type is a parameterized typestatic boolean
isPopulatable
(Type type) Check if a type is populatable.static boolean
isPrimitiveFieldWithDefaultValue
(Object object, Field field) Check if a field has a primitive type and matching default value which is set by the compiler.static <T> boolean
Check if the type is public.static boolean
Check if a field is static.static boolean
isTypeVariable
(Type type) Check if a type is a type variablestatic boolean
isWildcardType
(Type type) Check if a type is a wildcard typestatic <T> Randomizer<T>
newInstance
(Class<T> type, RandomizerArgument[] randomizerArguments) static void
setFieldValue
(Object object, Field field, Object value) Set a value (accessible or not accessible) in a field of a target object.static void
setProperty
(Object object, Field field, Object value) Set a value in a field of a target object.
-
Method Details
-
asRandomizer
Create a dynamic proxy that adapts the givenSupplier
to aRandomizer
.- Type Parameters:
T
- target type- Parameters:
supplier
- to adapt- Returns:
- the proxy randomizer
-
getDeclaredFields
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
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 onfield
- field to set the property onvalue
- value to set- Throws:
IllegalAccessException
- if the property cannot be setInvocationTargetException
-
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 onfield
- field to set the property onvalue
- value to set- Throws:
IllegalAccessException
- if the property cannot be set
-
getFieldValue
Get the value (accessible or not accessible) of a field of a target object.- Parameters:
object
- instance to get the field offield
- field to get the value of- Returns:
- the value of the field
- Throws:
IllegalAccessException
- if field cannot be accessed
-
getWrapperType
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 offield
- 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
Check if a field is static.- Parameters:
field
- the field to check- Returns:
- true if the field is static, false otherwise
-
isInterface
Check if a type is an interface.- Parameters:
type
- the type to check- Returns:
- true if the type is an interface, false otherwise
-
isAbstract
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
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
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
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
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
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
Check if a type is populatable.- Parameters:
type
- the type to check- Returns:
- true if the type is populatable, false otherwise
-
isIntrospectable
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
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
Check if a type isOptional
.- Parameters:
type
- the type to check- Returns:
- true if the type is
Optional
, false otherwise.
-
isJdkBuiltIn
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
Check if a type is a parameterized type- Parameters:
type
- the type to check- Returns:
- true if the type is parameterized, false otherwise
-
isWildcardType
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
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
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
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 searchtypes
- a list of types to filter- Returns:
- a list of types having the same parameterized types as the given type
-
getAnnotation
Looks for given annotationType on given field or read method for field.- Type Parameters:
T
- the actual type of annotation- Parameters:
field
- field to checkannotationType
- Type of annotation you're looking for.- Returns:
- given annotation if field or read method has this annotation or null.
-
isAnnotationPresent
Checks if field or corresponding read method is annotated with given annotationType.- Parameters:
field
- Field to checkannotationType
- 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 aCollection
type.- Parameters:
collectionInterface
- for which an empty implementation should be returned- Returns:
- empty implementation for the collection interface
-
createEmptyCollectionForType
Create an empty collection for the given type.- Parameters:
fieldType
- for which an empty collection should we createdinitialSize
- initial size of the collection- Returns:
- empty collection
-
getEmptyImplementationForMapInterface
Return an empty implementation for the givenMap
interface.- Parameters:
mapInterface
- for which an empty implementation should be returned- Returns:
- empty implementation for the given
Map
interface.
-
getWriteMethod
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
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)
-