Class TypeUtils
- java.lang.Object
-
- org.apache.commons.lang3.reflect.TypeUtils
-
public class TypeUtils extends java.lang.ObjectUtility methods focusing on type inspection, particularly with regard to generics.- Since:
- 3.0
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classTypeUtils.GenericArrayTypeImplGenericArrayType implementation class.private static classTypeUtils.ParameterizedTypeImplParameterizedType implementation class.static classTypeUtils.WildcardTypeBuilderWildcardTypebuilder.private static classTypeUtils.WildcardTypeImplWildcardType implementation class.
-
Field Summary
Fields Modifier and Type Field Description static java.lang.reflect.WildcardTypeWILDCARD_ALLA wildcard instance matching?.
-
Constructor Summary
Constructors Constructor Description TypeUtils()TypeUtilsinstances should NOT be constructed in standard programming.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description private static <T> java.lang.StringBuilderappendAllTo(java.lang.StringBuilder builder, java.lang.String sep, T... types)Appendstypestobuilderwith separatorsep.private static voidappendRecursiveTypes(java.lang.StringBuilder builder, int[] recursiveTypeIndexes, java.lang.reflect.Type[] argumentTypes)private static java.lang.StringclassToString(java.lang.Class<?> cls)Formats aClassas aString.static booleancontainsTypeVariables(java.lang.reflect.Type type)Tests, recursively, whether any of the type parameters associated withtypeare bound to variables.private static booleancontainsVariableTypeSameParametrizedTypeBound(java.lang.reflect.TypeVariable<?> typeVariable, java.lang.reflect.ParameterizedType parameterizedType)static java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type>determineTypeArguments(java.lang.Class<?> cls, java.lang.reflect.ParameterizedType superParameterizedType)Tries to determine the type arguments of a class/interface based on a super parameterized type's type arguments.private static booleanequals(java.lang.reflect.GenericArrayType genericArrayType, java.lang.reflect.Type type)Tests whethertequalsa.private static booleanequals(java.lang.reflect.ParameterizedType parameterizedType, java.lang.reflect.Type type)Tests whethertequalsp.private static booleanequals(java.lang.reflect.Type[] type1, java.lang.reflect.Type[] type2)Tests whethert1equalst2.static booleanequals(java.lang.reflect.Type type1, java.lang.reflect.Type type2)Tests equality of types.private static booleanequals(java.lang.reflect.WildcardType wildcardType, java.lang.reflect.Type type)Tests whethertequalsw.private static java.lang.reflect.Type[]extractTypeArgumentsFrom(java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> mappings, java.lang.reflect.TypeVariable<?>[] variables)Helper method to establish the formal parameters for a parameterized type.private static int[]findRecursiveTypes(java.lang.reflect.ParameterizedType parameterizedType)static java.lang.reflect.GenericArrayTypegenericArrayType(java.lang.reflect.Type componentType)Creates a generic array type instance.private static java.lang.StringgenericArrayTypeToString(java.lang.reflect.GenericArrayType genericArrayType)Formats aGenericArrayTypeas aString.static java.lang.reflect.TypegetArrayComponentType(java.lang.reflect.Type type)Gets the array component type oftype.private static java.lang.reflect.TypegetClosestParentType(java.lang.Class<?> cls, java.lang.Class<?> superClass)Gets the closest parent type to the super class specified bysuperClass.static java.lang.reflect.Type[]getImplicitBounds(java.lang.reflect.TypeVariable<?> typeVariable)Gets an array containing the sole type ofObjectifTypeVariable.getBounds()returns an empty array.static java.lang.reflect.Type[]getImplicitLowerBounds(java.lang.reflect.WildcardType wildcardType)Gets an array containing a single value ofnullifWildcardType.getLowerBounds()returns an empty array.static java.lang.reflect.Type[]getImplicitUpperBounds(java.lang.reflect.WildcardType wildcardType)Gets an array containing the sole value ofObjectifWildcardType.getUpperBounds()returns an empty array.private static java.lang.Class<?>getRawType(java.lang.reflect.ParameterizedType parameterizedType)Transforms the passed in type to aClassobject.static java.lang.Class<?>getRawType(java.lang.reflect.Type type, java.lang.reflect.Type assigningType)Gets the raw type of a Java type, given its context.private static java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type>getTypeArguments(java.lang.Class<?> cls, java.lang.Class<?> toClass, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> subtypeVarAssigns)Gets a map of the type arguments of a class in the context oftoClass.static java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type>getTypeArguments(java.lang.reflect.ParameterizedType type)Gets all the type arguments for this parameterized type including owner hierarchy arguments such asOuter<K, V>.Inner<T>.DeepInner<E>.private static java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type>getTypeArguments(java.lang.reflect.ParameterizedType parameterizedType, java.lang.Class<?> toClass, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> subtypeVarAssigns)Gets a map of the type arguments of a parameterized type in the context oftoClass.static java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type>getTypeArguments(java.lang.reflect.Type type, java.lang.Class<?> toClass)Gets the type arguments of a class/interface based on a subtype.private static java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type>getTypeArguments(java.lang.reflect.Type type, java.lang.Class<?> toClass, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> subtypeVarAssigns)Gets a map of the type arguments oftypein the context oftoClass.static booleanisArrayType(java.lang.reflect.Type type)Tests whether the specified type denotes an array type.private static booleanisAssignable(java.lang.reflect.Type type, java.lang.Class<?> toClass)Tests if the subject type may be implicitly cast to the target class following the Java generics rules.private static booleanisAssignable(java.lang.reflect.Type type, java.lang.reflect.GenericArrayType toGenericArrayType, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Tests if the subject type may be implicitly cast to the target generic array type following the Java generics rules.private static booleanisAssignable(java.lang.reflect.Type type, java.lang.reflect.ParameterizedType toParameterizedType, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Tests if the subject type may be implicitly cast to the target parameterized type following the Java generics rules.static booleanisAssignable(java.lang.reflect.Type type, java.lang.reflect.Type toType)Tests if the subject type may be implicitly cast to the target type following the Java generics rules.private static booleanisAssignable(java.lang.reflect.Type type, java.lang.reflect.Type toType, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Tests if the subject type may be implicitly cast to the target type following the Java generics rules.private static booleanisAssignable(java.lang.reflect.Type type, java.lang.reflect.TypeVariable<?> toTypeVariable, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Tests if the subject type may be implicitly cast to the target type variable following the Java generics rules.private static booleanisAssignable(java.lang.reflect.Type type, java.lang.reflect.WildcardType toWildcardType, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Tests if the subject type may be implicitly cast to the target wildcard type following the Java generics rules.static booleanisInstance(java.lang.Object value, java.lang.reflect.Type type)Tests if the given value can be assigned to the target type following the Java generics rules.private static <T> voidmapTypeVariablesToArguments(java.lang.Class<T> cls, java.lang.reflect.ParameterizedType parameterizedType, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Maps type variables.static java.lang.reflect.Type[]normalizeUpperBounds(java.lang.reflect.Type[] bounds)Strips out the redundant upper bound types in type variable types and wildcard types (or it would with wildcard types if multiple upper bounds were allowed).static java.lang.reflect.ParameterizedTypeparameterize(java.lang.Class<?> rawClass, java.lang.reflect.Type... typeArguments)Creates a parameterized type instance.static java.lang.reflect.ParameterizedTypeparameterize(java.lang.Class<?> rawClass, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVariableMap)Creates a parameterized type instance.private static java.lang.StringparameterizedTypeToString(java.lang.reflect.ParameterizedType parameterizedType)Formats aParameterizedTypeas aString.static java.lang.reflect.ParameterizedTypeparameterizeWithOwner(java.lang.reflect.Type owner, java.lang.Class<?> rawClass, java.lang.reflect.Type... typeArguments)Creates a parameterized type instance.static java.lang.reflect.ParameterizedTypeparameterizeWithOwner(java.lang.reflect.Type owner, java.lang.Class<?> rawClass, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVariableMap)Creates a parameterized type instance.private static java.lang.reflect.TypesubstituteTypeVariables(java.lang.reflect.Type type, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Finds the mapping fortypeintypeVarAssigns.static java.lang.StringtoLongString(java.lang.reflect.TypeVariable<?> typeVariable)Formats aTypeVariableincluding itsGenericDeclaration.static java.lang.StringtoString(java.lang.reflect.Type type)Formats a given type as a Java-esque String.private static <T> java.lang.StringtoString(T object)static booleantypesSatisfyVariables(java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVariableMap)Determines whether or not specified types satisfy the bounds of their mapped type variables.private static java.lang.StringtypeVariableToString(java.lang.reflect.TypeVariable<?> typeVariable)Formats aTypeVariableas aString.private static java.lang.reflect.Type[]unrollBounds(java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeArguments, java.lang.reflect.Type[] bounds)Unrolls variables in a type bounds array.private static java.lang.reflect.TypeunrollVariableAssignments(java.lang.reflect.TypeVariable<?> typeVariable, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Look upvarintypeVarAssignstransitively, i.e.static java.lang.reflect.TypeunrollVariables(java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeArguments, java.lang.reflect.Type type)Gets a type representingtypewith variable assignments "unrolled."static TypeUtils.WildcardTypeBuilderwildcardType()Gets aTypeUtils.WildcardTypeBuilder.private static java.lang.StringwildcardTypeToString(java.lang.reflect.WildcardType wildcardType)Formats aWildcardTypeas aString.static <T> Typed<T>wrap(java.lang.Class<T> type)Wraps the specifiedClassin aTypedwrapper.static <T> Typed<T>wrap(java.lang.reflect.Type type)Wraps the specifiedTypein aTypedwrapper.
-
-
-
Method Detail
-
appendAllTo
private static <T> java.lang.StringBuilder appendAllTo(java.lang.StringBuilder builder, java.lang.String sep, T... types)Appendstypestobuilderwith separatorsep.- Parameters:
builder- destinationsep- separatortypes- to append- Returns:
builder- Since:
- 3.2
-
appendRecursiveTypes
private static void appendRecursiveTypes(java.lang.StringBuilder builder, int[] recursiveTypeIndexes, java.lang.reflect.Type[] argumentTypes)
-
classToString
private static java.lang.String classToString(java.lang.Class<?> cls)
Formats aClassas aString.- Parameters:
cls-Classto format- Returns:
- String
- Since:
- 3.2
-
containsTypeVariables
public static boolean containsTypeVariables(java.lang.reflect.Type type)
Tests, recursively, whether any of the type parameters associated withtypeare bound to variables.- Parameters:
type- the type to check for type variables- Returns:
- boolean
- Since:
- 3.2
-
containsVariableTypeSameParametrizedTypeBound
private static boolean containsVariableTypeSameParametrizedTypeBound(java.lang.reflect.TypeVariable<?> typeVariable, java.lang.reflect.ParameterizedType parameterizedType)
-
determineTypeArguments
public static java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> determineTypeArguments(java.lang.Class<?> cls, java.lang.reflect.ParameterizedType superParameterizedType)Tries to determine the type arguments of a class/interface based on a super parameterized type's type arguments. This method is the inverse ofgetTypeArguments(Type, Class)which gets a class/interface's type arguments based on a subtype. It is far more limited in determining the type arguments for the subject class's type variables in that it can only determine those parameters that map from the subjectClassobject to the supertype.Example:
TreeSetsets its parameter as the parameter forNavigableSet, which in turn sets the parameter ofSortedSet, which in turn sets the parameter ofSet, which in turn sets the parameter ofCollection, which in turn sets the parameter ofIterable. SinceTreeSet's parameter maps (indirectly) toIterable's parameter, it will be able to determine that based on the super typeIterable<? extends Map<Integer, ? extends Collection<?>>>, the parameter ofTreeSetis? extends Map<Integer, ? extends Collection<?>>.- Parameters:
cls- the class whose type parameters are to be determined, notnullsuperParameterizedType- the super type from whichcls's type arguments are to be determined, notnull- Returns:
- a
Mapof the type assignments that could be determined for the type variables in each type in the inheritance hierarchy fromtypetotoClassinclusive.
-
equals
private static boolean equals(java.lang.reflect.GenericArrayType genericArrayType, java.lang.reflect.Type type)Tests whethertequalsa.- Parameters:
genericArrayType- LHStype- RHS- Returns:
- boolean
- Since:
- 3.2
-
equals
private static boolean equals(java.lang.reflect.ParameterizedType parameterizedType, java.lang.reflect.Type type)Tests whethertequalsp.- Parameters:
parameterizedType- LHStype- RHS- Returns:
- boolean
- Since:
- 3.2
-
equals
public static boolean equals(java.lang.reflect.Type type1, java.lang.reflect.Type type2)Tests equality of types.- Parameters:
type1- the first typetype2- the second type- Returns:
- boolean
- Since:
- 3.2
-
equals
private static boolean equals(java.lang.reflect.Type[] type1, java.lang.reflect.Type[] type2)Tests whethert1equalst2.- Parameters:
type1- LHStype2- RHS- Returns:
- boolean
- Since:
- 3.2
-
equals
private static boolean equals(java.lang.reflect.WildcardType wildcardType, java.lang.reflect.Type type)Tests whethertequalsw.- Parameters:
wildcardType- LHStype- RHS- Returns:
- boolean
- Since:
- 3.2
-
extractTypeArgumentsFrom
private static java.lang.reflect.Type[] extractTypeArgumentsFrom(java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> mappings, java.lang.reflect.TypeVariable<?>[] variables)Helper method to establish the formal parameters for a parameterized type.- Parameters:
mappings- map containing the assignmentsvariables- expected map keys- Returns:
- array of map values corresponding to specified keys
-
findRecursiveTypes
private static int[] findRecursiveTypes(java.lang.reflect.ParameterizedType parameterizedType)
-
genericArrayType
public static java.lang.reflect.GenericArrayType genericArrayType(java.lang.reflect.Type componentType)
Creates a generic array type instance.- Parameters:
componentType- the type of the elements of the array. For example the component type ofboolean[]isboolean- Returns:
GenericArrayType- Since:
- 3.2
-
genericArrayTypeToString
private static java.lang.String genericArrayTypeToString(java.lang.reflect.GenericArrayType genericArrayType)
Formats aGenericArrayTypeas aString.- Parameters:
genericArrayType-GenericArrayTypeto format- Returns:
- String
- Since:
- 3.2
-
getArrayComponentType
public static java.lang.reflect.Type getArrayComponentType(java.lang.reflect.Type type)
Gets the array component type oftype.- Parameters:
type- the type to be checked- Returns:
- component type or null if type is not an array type
-
getClosestParentType
private static java.lang.reflect.Type getClosestParentType(java.lang.Class<?> cls, java.lang.Class<?> superClass)Gets the closest parent type to the super class specified bysuperClass.- Parameters:
cls- the class in questionsuperClass- the super class- Returns:
- the closes parent type
-
getImplicitBounds
public static java.lang.reflect.Type[] getImplicitBounds(java.lang.reflect.TypeVariable<?> typeVariable)
Gets an array containing the sole type ofObjectifTypeVariable.getBounds()returns an empty array. Otherwise, it returns the result ofTypeVariable.getBounds()passed intonormalizeUpperBounds(java.lang.reflect.Type[]).- Parameters:
typeVariable- the subject type variable, notnull- Returns:
- a non-empty array containing the bounds of the type variable.
-
getImplicitLowerBounds
public static java.lang.reflect.Type[] getImplicitLowerBounds(java.lang.reflect.WildcardType wildcardType)
Gets an array containing a single value ofnullifWildcardType.getLowerBounds()returns an empty array. Otherwise, it returns the result ofWildcardType.getLowerBounds().- Parameters:
wildcardType- the subject wildcard type, notnull- Returns:
- a non-empty array containing the lower bounds of the wildcard type.
-
getImplicitUpperBounds
public static java.lang.reflect.Type[] getImplicitUpperBounds(java.lang.reflect.WildcardType wildcardType)
Gets an array containing the sole value ofObjectifWildcardType.getUpperBounds()returns an empty array. Otherwise, it returns the result ofWildcardType.getUpperBounds()passed intonormalizeUpperBounds(java.lang.reflect.Type[]).- Parameters:
wildcardType- the subject wildcard type, notnull- Returns:
- a non-empty array containing the upper bounds of the wildcard type.
-
getRawType
private static java.lang.Class<?> getRawType(java.lang.reflect.ParameterizedType parameterizedType)
Transforms the passed in type to aClassobject. Type-checking method of convenience.- Parameters:
parameterizedType- the type to be converted- Returns:
- the corresponding
Classobject - Throws:
java.lang.IllegalStateException- if the conversion fails
-
getRawType
public static java.lang.Class<?> getRawType(java.lang.reflect.Type type, java.lang.reflect.Type assigningType)Gets the raw type of a Java type, given its context. Primarily for use withTypeVariables andGenericArrayTypes, or when you do not know the runtime type oftype: if you know you have aClassinstance, it is already raw; if you know you have aParameterizedType, its raw type is only a method call away.- Parameters:
type- to resolveassigningType- type to be resolved against- Returns:
- the resolved
Classobject ornullif the type could not be resolved
-
getTypeArguments
private static java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> getTypeArguments(java.lang.Class<?> cls, java.lang.Class<?> toClass, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> subtypeVarAssigns)Gets a map of the type arguments of a class in the context oftoClass.- Parameters:
cls- the class in questiontoClass- the context classsubtypeVarAssigns- a map with type variables- Returns:
- the
Mapwith type arguments
-
getTypeArguments
public static java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> getTypeArguments(java.lang.reflect.ParameterizedType type)
Gets all the type arguments for this parameterized type including owner hierarchy arguments such asOuter<K, V>.Inner<T>.DeepInner<E>. The arguments are returned in aMapspecifying the argument type for eachTypeVariable.- Parameters:
type- specifies the subject parameterized type from which to harvest the parameters.- Returns:
- a
Mapof the type arguments to their respective type variables.
-
getTypeArguments
private static java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> getTypeArguments(java.lang.reflect.ParameterizedType parameterizedType, java.lang.Class<?> toClass, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> subtypeVarAssigns)Gets a map of the type arguments of a parameterized type in the context oftoClass.- Parameters:
parameterizedType- the parameterized typetoClass- the classsubtypeVarAssigns- a map with type variables- Returns:
- the
Mapwith type arguments
-
getTypeArguments
public static java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> getTypeArguments(java.lang.reflect.Type type, java.lang.Class<?> toClass)Gets the type arguments of a class/interface based on a subtype. For instance, this method will determine that both of the parameters for the interfaceMapareObjectfor the subtypePropertieseven though the subtype does not directly implement theMapinterface.This method returns
nulliftypeis not assignable totoClass. It returns an empty map if none of the classes or interfaces in its inheritance hierarchy specify any type arguments.A side effect of this method is that it also retrieves the type arguments for the classes and interfaces that are part of the hierarchy between
typeandtoClass. So with the above example, this method will also determine that the type arguments forHashtableare also bothObject. In cases where the interface specified bytoClassis (indirectly) implemented more than once (e.g. wheretoClassspecifies the interfaceIterableandtypespecifies a parameterized type that implements bothSetandCollection), this method will look at the inheritance hierarchy of only one of the implementations/subclasses; the first interface encountered that isn't a subinterface to one of the others in thetypetotoClasshierarchy.- Parameters:
type- the type from which to determine the type parameters oftoClasstoClass- the class whose type parameters are to be determined based on the subtypetype- Returns:
- a
Mapof the type assignments for the type variables in each type in the inheritance hierarchy fromtypetotoClassinclusive.
-
getTypeArguments
private static java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> getTypeArguments(java.lang.reflect.Type type, java.lang.Class<?> toClass, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> subtypeVarAssigns)Gets a map of the type arguments oftypein the context oftoClass.- Parameters:
type- the type in questiontoClass- the classsubtypeVarAssigns- a map with type variables- Returns:
- the
Mapwith type arguments
-
isArrayType
public static boolean isArrayType(java.lang.reflect.Type type)
Tests whether the specified type denotes an array type.- Parameters:
type- the type to be checked- Returns:
trueiftypeis an array class or aGenericArrayType.
-
isAssignable
private static boolean isAssignable(java.lang.reflect.Type type, java.lang.Class<?> toClass)Tests if the subject type may be implicitly cast to the target class following the Java generics rules.- Parameters:
type- the subject type to be assigned to the target typetoClass- the target class- Returns:
trueiftypeis assignable totoClass.
-
isAssignable
private static boolean isAssignable(java.lang.reflect.Type type, java.lang.reflect.GenericArrayType toGenericArrayType, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Tests if the subject type may be implicitly cast to the target generic array type following the Java generics rules.- Parameters:
type- the subject type to be assigned to the target typetoGenericArrayType- the target generic array typetypeVarAssigns- a map with type variables- Returns:
trueiftypeis assignable totoGenericArrayType.
-
isAssignable
private static boolean isAssignable(java.lang.reflect.Type type, java.lang.reflect.ParameterizedType toParameterizedType, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Tests if the subject type may be implicitly cast to the target parameterized type following the Java generics rules.- Parameters:
type- the subject type to be assigned to the target typetoParameterizedType- the target parameterized typetypeVarAssigns- a map with type variables- Returns:
trueiftypeis assignable totoType.
-
isAssignable
public static boolean isAssignable(java.lang.reflect.Type type, java.lang.reflect.Type toType)Tests if the subject type may be implicitly cast to the target type following the Java generics rules. If both types areClassobjects, the method returns the result ofClassUtils.isAssignable(Class, Class).- Parameters:
type- the subject type to be assigned to the target typetoType- the target type- Returns:
trueiftypeis assignable totoType.
-
isAssignable
private static boolean isAssignable(java.lang.reflect.Type type, java.lang.reflect.Type toType, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Tests if the subject type may be implicitly cast to the target type following the Java generics rules.- Parameters:
type- the subject type to be assigned to the target typetoType- the target typetypeVarAssigns- optional map of type variable assignments- Returns:
trueiftypeis assignable totoType.
-
isAssignable
private static boolean isAssignable(java.lang.reflect.Type type, java.lang.reflect.TypeVariable<?> toTypeVariable, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Tests if the subject type may be implicitly cast to the target type variable following the Java generics rules.- Parameters:
type- the subject type to be assigned to the target typetoTypeVariable- the target type variabletypeVarAssigns- a map with type variables- Returns:
trueiftypeis assignable totoTypeVariable.
-
isAssignable
private static boolean isAssignable(java.lang.reflect.Type type, java.lang.reflect.WildcardType toWildcardType, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Tests if the subject type may be implicitly cast to the target wildcard type following the Java generics rules.- Parameters:
type- the subject type to be assigned to the target typetoWildcardType- the target wildcard typetypeVarAssigns- a map with type variables- Returns:
trueiftypeis assignable totoWildcardType.
-
isInstance
public static boolean isInstance(java.lang.Object value, java.lang.reflect.Type type)Tests if the given value can be assigned to the target type following the Java generics rules.- Parameters:
value- the value to be checkedtype- the target type- Returns:
trueifvalueis an instance oftype.
-
mapTypeVariablesToArguments
private static <T> void mapTypeVariablesToArguments(java.lang.Class<T> cls, java.lang.reflect.ParameterizedType parameterizedType, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Maps type variables.- Type Parameters:
T- the generic type of the class in question- Parameters:
cls- the class in questionparameterizedType- the parameterized typetypeVarAssigns- the map to be filled
-
normalizeUpperBounds
public static java.lang.reflect.Type[] normalizeUpperBounds(java.lang.reflect.Type[] bounds)
Strips out the redundant upper bound types in type variable types and wildcard types (or it would with wildcard types if multiple upper bounds were allowed).Example, with the variable type declaration:
<K extends java.util.Collection<String> & java.util.List<String>>
since
Listis a subinterface ofCollection, this method will return the bounds as if the declaration had been:<K extends java.util.List<String>>
- Parameters:
bounds- an array of types representing the upper bounds of eitherWildcardTypeorTypeVariable, notnull.- Returns:
- an array containing the values from
boundsminus the redundant types.
-
parameterize
public static final java.lang.reflect.ParameterizedType parameterize(java.lang.Class<?> rawClass, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVariableMap)Creates a parameterized type instance.- Parameters:
rawClass- the raw class to create a parameterized type instance fortypeVariableMap- the map used for parameterization- Returns:
ParameterizedType- Since:
- 3.2
-
parameterize
public static final java.lang.reflect.ParameterizedType parameterize(java.lang.Class<?> rawClass, java.lang.reflect.Type... typeArguments)Creates a parameterized type instance.- Parameters:
rawClass- the raw class to create a parameterized type instance fortypeArguments- the types used for parameterization- Returns:
ParameterizedType- Since:
- 3.2
-
parameterizedTypeToString
private static java.lang.String parameterizedTypeToString(java.lang.reflect.ParameterizedType parameterizedType)
Formats aParameterizedTypeas aString.- Parameters:
parameterizedType-ParameterizedTypeto format- Returns:
- String
- Since:
- 3.2
-
parameterizeWithOwner
public static final java.lang.reflect.ParameterizedType parameterizeWithOwner(java.lang.reflect.Type owner, java.lang.Class<?> rawClass, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVariableMap)Creates a parameterized type instance.- Parameters:
owner- the owning typerawClass- the raw class to create a parameterized type instance fortypeVariableMap- the map used for parameterization- Returns:
ParameterizedType- Since:
- 3.2
-
parameterizeWithOwner
public static final java.lang.reflect.ParameterizedType parameterizeWithOwner(java.lang.reflect.Type owner, java.lang.Class<?> rawClass, java.lang.reflect.Type... typeArguments)Creates a parameterized type instance.- Parameters:
owner- the owning typerawClass- the raw class to create a parameterized type instance fortypeArguments- the types used for parameterization- Returns:
ParameterizedType- Since:
- 3.2
-
substituteTypeVariables
private static java.lang.reflect.Type substituteTypeVariables(java.lang.reflect.Type type, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Finds the mapping fortypeintypeVarAssigns.- Parameters:
type- the type to be replacedtypeVarAssigns- the map with type variables- Returns:
- the replaced type
- Throws:
java.lang.IllegalArgumentException- if the type cannot be substituted
-
toLongString
public static java.lang.String toLongString(java.lang.reflect.TypeVariable<?> typeVariable)
Formats aTypeVariableincluding itsGenericDeclaration.- Parameters:
typeVariable- the type variable to create a String representation for, notnull- Returns:
- String
- Since:
- 3.2
-
toString
private static <T> java.lang.String toString(T object)
-
toString
public static java.lang.String toString(java.lang.reflect.Type type)
Formats a given type as a Java-esque String.- Parameters:
type- the type to create a String representation for, notnull- Returns:
- String
- Since:
- 3.2
-
typesSatisfyVariables
public static boolean typesSatisfyVariables(java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVariableMap)
Determines whether or not specified types satisfy the bounds of their mapped type variables. When a type parameter extends another (such as<T, S extends T>), uses another as a type parameter (such as<T, S extends Comparable>>), or otherwise depends on another type variable to be specified, the dependencies must be included intypeVarAssigns.- Parameters:
typeVariableMap- specifies the potential types to be assigned to the type variables, notnull.- Returns:
- whether or not the types can be assigned to their respective type variables.
-
typeVariableToString
private static java.lang.String typeVariableToString(java.lang.reflect.TypeVariable<?> typeVariable)
Formats aTypeVariableas aString.- Parameters:
typeVariable-TypeVariableto format- Returns:
- String
- Since:
- 3.2
-
unrollBounds
private static java.lang.reflect.Type[] unrollBounds(java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeArguments, java.lang.reflect.Type[] bounds)Unrolls variables in a type bounds array.- Parameters:
typeArguments- assignmentsMapbounds- in which to expand variables- Returns:
boundswith any variables reassigned- Since:
- 3.2
-
unrollVariableAssignments
private static java.lang.reflect.Type unrollVariableAssignments(java.lang.reflect.TypeVariable<?> typeVariable, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)Look upvarintypeVarAssignstransitively, i.e. keep looking until the value found is not a type variable.- Parameters:
typeVariable- the type variable to look uptypeVarAssigns- the map used for the look up- Returns:
- Type or
nullif some variable was not in the map - Since:
- 3.2
-
unrollVariables
public static java.lang.reflect.Type unrollVariables(java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeArguments, java.lang.reflect.Type type)Gets a type representingtypewith variable assignments "unrolled."- Parameters:
typeArguments- as fromgetTypeArguments(Type, Class)type- the type to unroll variable assignments for- Returns:
- Type
- Since:
- 3.2
-
wildcardType
public static TypeUtils.WildcardTypeBuilder wildcardType()
Gets aTypeUtils.WildcardTypeBuilder.- Returns:
TypeUtils.WildcardTypeBuilder- Since:
- 3.2
-
wildcardTypeToString
private static java.lang.String wildcardTypeToString(java.lang.reflect.WildcardType wildcardType)
Formats aWildcardTypeas aString.- Parameters:
wildcardType-WildcardTypeto format- Returns:
- String
- Since:
- 3.2
-
wrap
public static <T> Typed<T> wrap(java.lang.Class<T> type)
Wraps the specifiedClassin aTypedwrapper.- Type Parameters:
T- generic type- Parameters:
type- to wrap- Returns:
- Typed<T>
- Since:
- 3.2
-
-