public class TypeUtils
extends java.lang.Object
Modifier and Type | Class and Description |
---|---|
private static class |
TypeUtils.GenericArrayTypeImpl
GenericArrayType implementation class.
|
private static class |
TypeUtils.ParameterizedTypeImpl
ParameterizedType implementation class.
|
static class |
TypeUtils.WildcardTypeBuilder
WildcardType builder. |
private static class |
TypeUtils.WildcardTypeImpl
WildcardType implementation class.
|
Modifier and Type | Field and Description |
---|---|
static java.lang.reflect.WildcardType |
WILDCARD_ALL
A wildcard instance matching
? . |
Constructor and Description |
---|
TypeUtils()
TypeUtils instances should NOT be constructed in standard
programming. |
Modifier and Type | Method and Description |
---|---|
private static <T> java.lang.StringBuilder |
appendAllTo(java.lang.StringBuilder builder,
java.lang.String sep,
T... types)
Appends
types to builder with separator sep . |
private static void |
appendRecursiveTypes(java.lang.StringBuilder builder,
int[] recursiveTypeIndexes,
java.lang.reflect.Type[] argumentTypes) |
private static java.lang.String |
classToString(java.lang.Class<?> cls)
Formats a
Class as a String . |
static boolean |
containsTypeVariables(java.lang.reflect.Type type)
Tests, recursively, whether any of the type parameters associated with
type are bound to variables. |
private static boolean |
containsVariableTypeSameParametrizedTypeBound(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 boolean |
equals(java.lang.reflect.GenericArrayType genericArrayType,
java.lang.reflect.Type type)
Tests whether
t equals a . |
private static boolean |
equals(java.lang.reflect.ParameterizedType parameterizedType,
java.lang.reflect.Type type)
Tests whether
t equals p . |
private static boolean |
equals(java.lang.reflect.Type[] type1,
java.lang.reflect.Type[] type2)
Tests whether
t1 equals t2 . |
static boolean |
equals(java.lang.reflect.Type type1,
java.lang.reflect.Type type2)
Tests equality of types.
|
private static boolean |
equals(java.lang.reflect.WildcardType wildcardType,
java.lang.reflect.Type type)
Tests whether
t equals w . |
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.GenericArrayType |
genericArrayType(java.lang.reflect.Type componentType)
Creates a generic array type instance.
|
private static java.lang.String |
genericArrayTypeToString(java.lang.reflect.GenericArrayType genericArrayType)
Formats a
GenericArrayType as a String . |
static java.lang.reflect.Type |
getArrayComponentType(java.lang.reflect.Type type)
Gets the array component type of
type . |
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 by
superClass . |
static java.lang.reflect.Type[] |
getImplicitBounds(java.lang.reflect.TypeVariable<?> typeVariable)
Gets an array containing the sole type of
Object if
TypeVariable.getBounds() returns an empty array. |
static java.lang.reflect.Type[] |
getImplicitLowerBounds(java.lang.reflect.WildcardType wildcardType)
Gets an array containing a single value of
null if
WildcardType.getLowerBounds() returns an empty array. |
static java.lang.reflect.Type[] |
getImplicitUpperBounds(java.lang.reflect.WildcardType wildcardType)
Gets an array containing the sole value of
Object if
WildcardType.getUpperBounds() returns an empty array. |
private static java.lang.Class<?> |
getRawType(java.lang.reflect.ParameterizedType parameterizedType)
Transforms the passed in type to a
Class object. |
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 of
toClass . |
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 as
Outer<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 of
toClass . |
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 of
type in the context of toClass . |
static boolean |
isArrayType(java.lang.reflect.Type type)
Tests whether the specified type denotes an array type.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.
|
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.ParameterizedType |
parameterize(java.lang.Class<?> rawClass,
java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVariableMap)
Creates a parameterized type instance.
|
static java.lang.reflect.ParameterizedType |
parameterize(java.lang.Class<?> rawClass,
java.lang.reflect.Type... typeArguments)
Creates a parameterized type instance.
|
private static java.lang.String |
parameterizedTypeToString(java.lang.reflect.ParameterizedType parameterizedType)
Formats a
ParameterizedType as a String . |
static 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.
|
static java.lang.reflect.ParameterizedType |
parameterizeWithOwner(java.lang.reflect.Type owner,
java.lang.Class<?> rawClass,
java.lang.reflect.Type... typeArguments)
Creates a parameterized type instance.
|
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 for
type in typeVarAssigns . |
static java.lang.String |
toLongString(java.lang.reflect.TypeVariable<?> typeVariable)
Formats a
TypeVariable including its GenericDeclaration . |
private static <T> java.lang.String |
toString(T object) |
static java.lang.String |
toString(java.lang.reflect.Type type)
Formats a given type as a Java-esque String.
|
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.
|
private static java.lang.String |
typeVariableToString(java.lang.reflect.TypeVariable<?> typeVariable)
Formats a
TypeVariable as a String . |
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.Type |
unrollVariableAssignments(java.lang.reflect.TypeVariable<?> typeVariable,
java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)
Look up
var in typeVarAssigns transitively,
i.e. |
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 representing
type with variable assignments "unrolled." |
static TypeUtils.WildcardTypeBuilder |
wildcardType()
Gets a
TypeUtils.WildcardTypeBuilder . |
private static java.lang.String |
wildcardTypeToString(java.lang.reflect.WildcardType wildcardType)
Formats a
WildcardType as a String . |
static <T> Typed<T> |
wrap(java.lang.Class<T> type)
Wraps the specified
Class in a Typed wrapper. |
static <T> Typed<T> |
wrap(java.lang.reflect.Type type)
Wraps the specified
Type in a Typed wrapper. |
public static final java.lang.reflect.WildcardType WILDCARD_ALL
?
.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.
private static <T> java.lang.StringBuilder appendAllTo(java.lang.StringBuilder builder, java.lang.String sep, T... types)
types
to builder
with separator sep
.builder
- destinationsep
- separatortypes
- to appendbuilder
private static void appendRecursiveTypes(java.lang.StringBuilder builder, int[] recursiveTypeIndexes, java.lang.reflect.Type[] argumentTypes)
private static java.lang.String classToString(java.lang.Class<?> cls)
Class
as a String
.cls
- Class
to formatpublic static boolean containsTypeVariables(java.lang.reflect.Type type)
type
are bound to variables.type
- the type to check for type variablesprivate static boolean containsVariableTypeSameParametrizedTypeBound(java.lang.reflect.TypeVariable<?> typeVariable, java.lang.reflect.ParameterizedType parameterizedType)
public static java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> determineTypeArguments(java.lang.Class<?> cls, java.lang.reflect.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 null
superParameterizedType
- the super type from which cls
's type
arguments are to be determined, not null
Map
of the type assignments that could be determined
for the type variables in each type in the inheritance hierarchy from
type
to toClass
inclusive.private static boolean equals(java.lang.reflect.GenericArrayType genericArrayType, java.lang.reflect.Type type)
t
equals a
.genericArrayType
- LHStype
- RHSprivate static boolean equals(java.lang.reflect.ParameterizedType parameterizedType, java.lang.reflect.Type type)
t
equals p
.parameterizedType
- LHStype
- RHSpublic static boolean equals(java.lang.reflect.Type type1, java.lang.reflect.Type type2)
type1
- the first typetype2
- the second typeprivate static boolean equals(java.lang.reflect.Type[] type1, java.lang.reflect.Type[] type2)
t1
equals t2
.type1
- LHStype2
- RHSprivate static boolean equals(java.lang.reflect.WildcardType wildcardType, java.lang.reflect.Type type)
t
equals w
.wildcardType
- LHStype
- RHSprivate static java.lang.reflect.Type[] extractTypeArgumentsFrom(java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> mappings, java.lang.reflect.TypeVariable<?>[] variables)
mappings
- map containing the assignmentsvariables
- expected map keysprivate static int[] findRecursiveTypes(java.lang.reflect.ParameterizedType parameterizedType)
public static java.lang.reflect.GenericArrayType genericArrayType(java.lang.reflect.Type componentType)
componentType
- the type of the elements of the array. For example the component type of boolean[]
is boolean
GenericArrayType
private static java.lang.String genericArrayTypeToString(java.lang.reflect.GenericArrayType genericArrayType)
GenericArrayType
as a String
.genericArrayType
- GenericArrayType
to formatpublic static java.lang.reflect.Type getArrayComponentType(java.lang.reflect.Type type)
type
.type
- the type to be checkedprivate static java.lang.reflect.Type getClosestParentType(java.lang.Class<?> cls, java.lang.Class<?> superClass)
superClass
.cls
- the class in questionsuperClass
- the super classpublic static java.lang.reflect.Type[] getImplicitBounds(java.lang.reflect.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 null
public static java.lang.reflect.Type[] getImplicitLowerBounds(java.lang.reflect.WildcardType wildcardType)
null
if
WildcardType.getLowerBounds()
returns an empty array. Otherwise,
it returns the result of WildcardType.getLowerBounds()
.wildcardType
- the subject wildcard type, not null
public static java.lang.reflect.Type[] getImplicitUpperBounds(java.lang.reflect.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 null
private static java.lang.Class<?> getRawType(java.lang.reflect.ParameterizedType parameterizedType)
Class
object. Type-checking method of convenience.parameterizedType
- the type to be convertedClass
objectjava.lang.IllegalStateException
- if the conversion failspublic static java.lang.Class<?> getRawType(java.lang.reflect.Type type, java.lang.reflect.Type assigningType)
TypeVariable
s and GenericArrayType
s, 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 resolvedprivate 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)
toClass
.cls
- the class in questiontoClass
- the context classsubtypeVarAssigns
- a map with type variablesMap
with type argumentspublic static java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> getTypeArguments(java.lang.reflect.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.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)
toClass
.parameterizedType
- the parameterized typetoClass
- the classsubtypeVarAssigns
- a map with type variablesMap
with type argumentspublic static java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> getTypeArguments(java.lang.reflect.Type type, java.lang.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
toClass
toClass
- the class whose type parameters are to be determined based
on the subtype type
Map
of the type assignments for the type variables in
each type in the inheritance hierarchy from type
to
toClass
inclusive.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)
type
in the context of toClass
.type
- the type in questiontoClass
- the classsubtypeVarAssigns
- a map with type variablesMap
with type argumentspublic static boolean isArrayType(java.lang.reflect.Type type)
type
- the type to be checkedtrue
if type
is an array class or a GenericArrayType
.private static boolean isAssignable(java.lang.reflect.Type type, java.lang.Class<?> toClass)
type
- the subject type to be assigned to the target typetoClass
- the target classtrue
if type
is assignable to toClass
.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)
type
- the subject type to be assigned to the target typetoGenericArrayType
- the target generic array typetypeVarAssigns
- a map with type variablestrue
if type
is assignable to
toGenericArrayType
.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)
type
- the subject type to be assigned to the target typetoParameterizedType
- the target parameterized typetypeVarAssigns
- a map with type variablestrue
if type
is assignable to toType
.public static boolean isAssignable(java.lang.reflect.Type type, java.lang.reflect.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
.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)
type
- the subject type to be assigned to the target typetoType
- the target typetypeVarAssigns
- optional map of type variable assignmentstrue
if type
is assignable to toType
.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)
type
- the subject type to be assigned to the target typetoTypeVariable
- the target type variabletypeVarAssigns
- a map with type variablestrue
if type
is assignable to
toTypeVariable
.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)
type
- the subject type to be assigned to the target typetoWildcardType
- the target wildcard typetypeVarAssigns
- a map with type variablestrue
if type
is assignable to
toWildcardType
.public static boolean isInstance(java.lang.Object value, java.lang.reflect.Type type)
value
- the value to be checkedtype
- the target typetrue
if value
is an instance of type
.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)
T
- the generic type of the class in questioncls
- the class in questionparameterizedType
- the parameterized typetypeVarAssigns
- the map to be filledpublic static java.lang.reflect.Type[] normalizeUpperBounds(java.lang.reflect.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.public static final java.lang.reflect.ParameterizedType parameterize(java.lang.Class<?> rawClass, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVariableMap)
rawClass
- the raw class to create a parameterized type instance fortypeVariableMap
- the map used for parameterizationParameterizedType
public static final java.lang.reflect.ParameterizedType parameterize(java.lang.Class<?> rawClass, java.lang.reflect.Type... typeArguments)
rawClass
- the raw class to create a parameterized type instance fortypeArguments
- the types used for parameterizationParameterizedType
private static java.lang.String parameterizedTypeToString(java.lang.reflect.ParameterizedType parameterizedType)
ParameterizedType
as a String
.parameterizedType
- ParameterizedType
to formatpublic 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)
owner
- the owning typerawClass
- the raw class to create a parameterized type instance fortypeVariableMap
- the map used for parameterizationParameterizedType
public static final java.lang.reflect.ParameterizedType parameterizeWithOwner(java.lang.reflect.Type owner, java.lang.Class<?> rawClass, java.lang.reflect.Type... typeArguments)
owner
- the owning typerawClass
- the raw class to create a parameterized type instance fortypeArguments
- the types used for parameterizationParameterizedType
private static java.lang.reflect.Type substituteTypeVariables(java.lang.reflect.Type type, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)
type
in typeVarAssigns
.type
- the type to be replacedtypeVarAssigns
- the map with type variablesjava.lang.IllegalArgumentException
- if the type cannot be substitutedpublic static java.lang.String toLongString(java.lang.reflect.TypeVariable<?> typeVariable)
TypeVariable
including its GenericDeclaration
.typeVariable
- the type variable to create a String representation for, not null
private static <T> java.lang.String toString(T object)
public static java.lang.String toString(java.lang.reflect.Type type)
type
- the type to create a String representation for, not null
public static boolean typesSatisfyVariables(java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.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
.private static java.lang.String typeVariableToString(java.lang.reflect.TypeVariable<?> typeVariable)
TypeVariable
as a String
.typeVariable
- TypeVariable
to formatprivate static java.lang.reflect.Type[] unrollBounds(java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeArguments, java.lang.reflect.Type[] bounds)
typeArguments
- assignments Map
bounds
- in which to expand variablesbounds
with any variables reassignedprivate static java.lang.reflect.Type unrollVariableAssignments(java.lang.reflect.TypeVariable<?> typeVariable, java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeVarAssigns)
var
in typeVarAssigns
transitively,
i.e. keep looking until the value found is not a type variable.typeVariable
- the type variable to look uptypeVarAssigns
- the map used for the look upnull
if some variable was not in the mappublic static java.lang.reflect.Type unrollVariables(java.util.Map<java.lang.reflect.TypeVariable<?>,java.lang.reflect.Type> typeArguments, java.lang.reflect.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.WildcardTypeBuilder
private static java.lang.String wildcardTypeToString(java.lang.reflect.WildcardType wildcardType)
WildcardType
as a String
.wildcardType
- WildcardType
to formatpublic static <T> Typed<T> wrap(java.lang.Class<T> type)
Class
in a Typed
wrapper.T
- generic typetype
- to wrap