|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object org.apache.commons.lang3.reflect.TypeUtils
public class TypeUtils
Utility methods focusing on type inspection, particularly with regard to generics.
Constructor Summary | |
---|---|
TypeUtils()
TypeUtils instances should NOT be constructed in standard programming. |
Method Summary | |
---|---|
static Map<TypeVariable<?>,Type> |
determineTypeArguments(Class<?> cls,
ParameterizedType superType)
Tries to determine the type arguments of a class/interface based on a super parameterized type's type arguments. |
static Type |
getArrayComponentType(Type type)
Get the array component type of type . |
static Type[] |
getImplicitBounds(TypeVariable<?> typeVariable)
Returns an array containing the sole type of Object if
TypeVariable.getBounds() returns an empty array. |
static Type[] |
getImplicitLowerBounds(WildcardType wildcardType)
Returns an array containing a single value of null if
WildcardType.getLowerBounds() returns an empty array. |
static Type[] |
getImplicitUpperBounds(WildcardType wildcardType)
Returns an array containing the sole value of Object if
WildcardType.getUpperBounds() returns an empty array. |
static Class<?> |
getRawType(Type type,
Type assigningType)
Get the raw type of a Java type, given its context. |
static Map<TypeVariable<?>,Type> |
getTypeArguments(ParameterizedType type)
Retrieves all the type arguments for this parameterized type including owner hierarchy arguments such as
Outer . |
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)
Learn whether the specified type denotes an array type. |
static boolean |
isAssignable(Type type,
Type toType)
Checks if the subject type may be implicitly cast to the target type following the Java generics rules. |
static boolean |
isInstance(Object value,
Type type)
Checks if the given value can be assigned to the target type following the Java generics rules. |
static Type[] |
normalizeUpperBounds(Type[] bounds)
This method 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 boolean |
typesSatisfyVariables(Map<TypeVariable<?>,Type> typeVarAssigns)
Determines whether or not specified types satisfy the bounds of their mapped type variables. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
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.
Method Detail |
---|
public static boolean isAssignable(Type type, Type toType)
Checks if the subject type may be implicitly cast to the target type
following the Java generics rules. If both types are 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 type
true
if type
is assignable to toType
.public static Map<TypeVariable<?>,Type> getTypeArguments(ParameterizedType type)
Retrieves all the type arguments for this parameterized type
including owner hierarchy arguments such as
Outer
. 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.
public static Map<TypeVariable<?>,Type> getTypeArguments(Type type, 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
interface 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
type
to
toClass
inclusive.public static Map<TypeVariable<?>,Type> determineTypeArguments(Class<?> cls, ParameterizedType superType)
Tries to determine the type arguments of a class/interface based on a
super parameterized type's type arguments. This method is the inverse of
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
, the parameter of
TreeSet
is ? extends Map
.
cls
- the class whose type parameters are to be determinedsuperType
- the super type from which cls
's type
arguments are to be determined
type
to toClass
inclusive.public static boolean isInstance(Object value, Type type)
Checks if the given value can be assigned to the target type following the Java generics rules.
value
- the value to be checkedtype
- the target type
value
is an instance of type
.public static Type[] normalizeUpperBounds(Type[] bounds)
This method 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
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
.
bounds
minus the
redundant types.public static Type[] getImplicitBounds(TypeVariable<?> typeVariable)
Returns an array containing the sole type of 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
public static Type[] getImplicitUpperBounds(WildcardType wildcardType)
Returns an array containing the sole value of 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
public static Type[] getImplicitLowerBounds(WildcardType wildcardType)
Returns an array containing a single value of null
if
WildcardType.getLowerBounds()
returns an empty array. Otherwise,
it returns the result of WildcardType.getLowerBounds()
.
wildcardType
- the subject wildcard type
public static boolean typesSatisfyVariables(Map<TypeVariable<?>,Type> typeVarAssigns)
Determines whether or not specified types satisfy the bounds of their
mapped type variables. When a type parameter extends another (such as
), uses another as a type parameter (such as
), or otherwise depends on
another type variable to be specified, the dependencies must be included
in typeVarAssigns
.
typeVarAssigns
- specifies the potential types to be assigned to the
type variables.
public static Class<?> getRawType(Type type, Type assigningType)
Get the raw type of a Java type, given its context. Primarily for use
with 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 against
Class
object or null
if
the type could not be resolvedpublic static boolean isArrayType(Type type)
type
- the type to be checked
true
if type
is an array class or a GenericArrayType
.public static Type getArrayComponentType(Type type)
type
.
type
- the type to be checked
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |