public class TypeUtils extends Object
| Modifier and Type | Class and Description |
|---|---|
static class |
TypeUtils.WildcardTypeBuilder
WildcardType builder. |
| Modifier and Type | Field and Description |
|---|---|
static WildcardType |
WILDCARD_ALL
A wildcard instance matching
?. |
| Constructor and Description |
|---|
TypeUtils()
Deprecated.
TODO Make private in 4.0.
|
| Modifier and Type | Method and Description |
|---|---|
static boolean |
containsTypeVariables(Type type)
Tests, recursively, whether any of the type parameters associated with
type are bound to variables. |
static Map<TypeVariable<?>,Type> |
determineTypeArguments(Class<?> cls,
ParameterizedType superParameterizedType)
Tries to determine the type arguments of a class/interface based on a super parameterized type's type arguments.
|
static boolean |
equals(Type type1,
Type type2)
Tests equality of types.
|
static GenericArrayType |
genericArrayType(Type componentType)
Creates a generic array type instance.
|
static Type |
getArrayComponentType(Type type)
Gets the array component type of
type. |
static Type[] |
getImplicitBounds(TypeVariable<?> typeVariable)
Gets an array containing the sole type of
Object if TypeVariable.getBounds() returns an empty array. |
static Type[] |
getImplicitLowerBounds(WildcardType wildcardType)
Gets an array containing a single value of
null if WildcardType.getLowerBounds() returns an empty array. |
static Type[] |
getImplicitUpperBounds(WildcardType wildcardType)
Gets an array containing the sole value of
Object if WildcardType.getUpperBounds() returns an empty array. |
static Class<?> |
getRawType(Type type,
Type assigningType)
Gets the raw type of a Java type, given its context.
|
static Map<TypeVariable<?>,Type> |
getTypeArguments(ParameterizedType type)
Gets all the type arguments for this parameterized type including owner hierarchy arguments such as
Outer<K, V>.Inner<T>.DeepInner<E> . |
static Map<TypeVariable<?>,Type> |
getTypeArguments(Type type,
Class<?> toClass)
Gets the type arguments of a class/interface based on a subtype.
|
static boolean |
isArrayType(Type type)
Tests whether the specified type denotes an array type.
|
static boolean |
isAssignable(Type type,
Type toType)
Tests if the subject type may be implicitly cast to the target type following the Java generics rules.
|
static boolean |
isInstance(Object value,
Type type)
Tests if the given value can be assigned to the target type following the Java generics rules.
|
static Type[] |
normalizeUpperBounds(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 ParameterizedType |
parameterize(Class<?> rawClass,
Map<TypeVariable<?>,Type> typeVariableMap)
Creates a parameterized type instance.
|
static ParameterizedType |
parameterize(Class<?> rawClass,
Type... typeArguments)
Creates a parameterized type instance.
|
static ParameterizedType |
parameterizeWithOwner(Type owner,
Class<?> rawClass,
Map<TypeVariable<?>,Type> typeVariableMap)
Creates a parameterized type instance.
|
static ParameterizedType |
parameterizeWithOwner(Type owner,
Class<?> rawClass,
Type... typeArguments)
Creates a parameterized type instance.
|
static String |
toLongString(TypeVariable<?> typeVariable)
Formats a
TypeVariable including its GenericDeclaration. |
static String |
toString(Type type)
Formats a given type as a Java-esque String.
|
static boolean |
typesSatisfyVariables(Map<TypeVariable<?>,Type> typeVariableMap)
Determines whether or not specified types satisfy the bounds of their mapped type variables.
|
static Type |
unrollVariables(Map<TypeVariable<?>,Type> typeArguments,
Type type)
Gets a type representing
type with variable assignments "unrolled." |
static TypeUtils.WildcardTypeBuilder |
wildcardType()
Gets a
TypeUtils.WildcardTypeBuilder. |
static <T> Typed<T> |
wrap(Class<T> type)
|
static <T> Typed<T> |
wrap(Type type)
|
public static final WildcardType WILDCARD_ALL
?.@Deprecated public TypeUtils()
TypeUtils instances should NOT be constructed in standard programming. Instead, the class should be used as
TypeUtils.isAssignable(cls, toClass).
This constructor is public to permit tools that require a JavaBean instance to operate.
public static boolean containsTypeVariables(Type type)
type are bound to variables.type - the type to check for type variablespublic static Map<TypeVariable<?>,Type> determineTypeArguments(Class<?> cls, ParameterizedType superParameterizedType)
getTypeArguments(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 subject Class object to the
supertype.
Example: TreeSet sets its parameter as the parameter for NavigableSet, which in turn sets the
parameter of SortedSet, which in turn sets the parameter of Set, which in turn sets the parameter of
Collection, which in turn sets the parameter of Iterable. Since TreeSet's parameter maps (indirectly) to
Iterable's parameter, it will be able to determine that based on the super type Iterable<? extends
Map<Integer, ? extends Collection<?>>>, the parameter of TreeSet is ? extends Map<Integer, ? extends
Collection<?>>.
cls - the class whose type parameters are to be determined, not nullsuperParameterizedType - the super type from which cls's type arguments are to be determined, not nullMap of the type assignments that could be determined for the type variables in each type in the inheritance hierarchy from type
to toClass inclusive.NullPointerException - if either cls or superParameterizedType is nullpublic static boolean equals(Type type1, Type type2)
type1 - the first typetype2 - the second typepublic static GenericArrayType genericArrayType(Type componentType)
componentType - the type of the elements of the array. For example the component type of boolean[] is booleanGenericArrayTypepublic static Type getArrayComponentType(Type type)
type.type - the type to be checkedpublic static Type[] getImplicitBounds(TypeVariable<?> typeVariable)
Object if TypeVariable.getBounds() returns an empty array. Otherwise, it returns the result of
TypeVariable.getBounds() passed into normalizeUpperBounds(java.lang.reflect.Type[]).typeVariable - the subject type variable, not nullObject.NullPointerException - if typeVariable is nullpublic static Type[] getImplicitLowerBounds(WildcardType wildcardType)
null if WildcardType.getLowerBounds() returns an empty array. Otherwise, it returns the result
of WildcardType.getLowerBounds().wildcardType - the subject wildcard type, not nullNullPointerException - if wildcardType is nullpublic static Type[] getImplicitUpperBounds(WildcardType wildcardType)
Object if WildcardType.getUpperBounds() returns an empty array. Otherwise, it returns the
result of WildcardType.getUpperBounds() passed into normalizeUpperBounds(java.lang.reflect.Type[]).wildcardType - the subject wildcard type, not nullNullPointerException - if wildcardType is nullpublic static Class<?> getRawType(Type type, Type assigningType)
TypeVariables and GenericArrayTypes, or when you do not know
the runtime type of type: if you know you have a Class instance, it is already raw; if you know you have a ParameterizedType, its
raw type is only a method call away.type - to resolveassigningType - type to be resolved againstClass object or null if the type could not be resolvedpublic static Map<TypeVariable<?>,Type> getTypeArguments(ParameterizedType type)
Outer<K, V>.Inner<T>.DeepInner<E> . The
arguments are returned in a Map specifying the argument type for each TypeVariable.type - specifies the subject parameterized type from which to harvest the parameters.Map of the type arguments to their respective type variables.public static Map<TypeVariable<?>,Type> getTypeArguments(Type type, Class<?> toClass)
Map are Object for the subtype Properties even though the subtype does not directly implement the
Map interface.
This method returns null if type is not assignable to toClass. 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
type and toClass. So with the above example, this method will also determine that the type arguments for Hashtable are also both Object. In cases where the interface specified by toClass is (indirectly) implemented more than once (e.g. where
toClass specifies the interface Iterable and type specifies a parameterized type that implements both
Set and Collection), 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 the type to toClass
hierarchy.
type - the type from which to determine the type parameters of toClasstoClass - the class whose type parameters are to be determined based on the subtype typeMap of the type assignments for the type variables in each type in the inheritance hierarchy from type to toClass
inclusive.public static boolean isArrayType(Type type)
type - the type to be checkedtrue if type is an array class or a GenericArrayType.public static boolean isAssignable(Type type, Type toType)
Class objects, the
method returns the result of ClassUtils.isAssignable(Class, Class).type - the subject type to be assigned to the target typetoType - the target typetrue if type is assignable to toType.public static boolean isInstance(Object value, Type type)
value - the value to be checkedtype - the target typetrue if value is an instance of type.public static Type[] normalizeUpperBounds(Type[] bounds)
Example, with the variable type declaration:
<K extends java.util.Collection<String> & java.util.List<String>>
since List is a subinterface of Collection, this method will return the bounds as if the declaration had been:
<K extends java.util.List<String>>
bounds - an array of types representing the upper bounds of either WildcardType or TypeVariable, not null.bounds minus the redundant types.NullPointerException - if bounds is nullpublic static final ParameterizedType parameterize(Class<?> rawClass, Map<TypeVariable<?>,Type> typeVariableMap)
rawClass - the raw class to create a parameterized type instance fortypeVariableMap - the map used for parameterizationParameterizedTypeNullPointerException - if either rawClass or typeVariableMap is nullpublic static final ParameterizedType parameterize(Class<?> rawClass, Type... typeArguments)
rawClass - the raw class to create a parameterized type instance fortypeArguments - the types used for parameterizationParameterizedTypeNullPointerException - if rawClass is nullpublic static final ParameterizedType parameterizeWithOwner(Type owner, Class<?> rawClass, Map<TypeVariable<?>,Type> typeVariableMap)
owner - the owning typerawClass - the raw class to create a parameterized type instance fortypeVariableMap - the map used for parameterizationParameterizedTypeNullPointerException - if either rawClass or typeVariableMap is nullpublic static final ParameterizedType parameterizeWithOwner(Type owner, Class<?> rawClass, Type... typeArguments)
owner - the owning typerawClass - the raw class to create a parameterized type instance fortypeArguments - the types used for parameterizationParameterizedTypeNullPointerException - if rawClass is nullpublic static String toLongString(TypeVariable<?> typeVariable)
TypeVariable including its GenericDeclaration.typeVariable - the type variable to create a String representation for, not nullNullPointerException - if typeVariable is nullpublic static String toString(Type type)
type - the type to create a String representation for, not nullNullPointerException - if type is nullpublic static boolean typesSatisfyVariables(Map<TypeVariable<?>,Type> typeVariableMap)
<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 in typeVarAssigns.typeVariableMap - specifies the potential types to be assigned to the type variables, not null.NullPointerException - if typeVariableMap is nullpublic static Type unrollVariables(Map<TypeVariable<?>,Type> typeArguments, Type type)
type with variable assignments "unrolled."typeArguments - as from getTypeArguments(Type, Class)type - the type to unroll variable assignments forpublic static TypeUtils.WildcardTypeBuilder wildcardType()
TypeUtils.WildcardTypeBuilder.TypeUtils.WildcardTypeBuilderpublic static <T> Typed<T> wrap(Class<T> type)
T - generic typetype - to wrapTyped<T>Copyright © 2001–2025 The Apache Software Foundation. All rights reserved.