Class TypeDescriptor<T>
- Type Parameters:
T- the type represented by thisTypeDescriptor
- All Implemented Interfaces:
Serializable
To prevent losing actual type arguments due to erasure, create an anonymous subclass with concrete types:
TypeDescriptor<List<String>> typeDescriptor = new TypeDescriptor<List<String>>() {};
If the above were not an anonymous subclass, the type List<String> would be erased and
unavailable at run time.
- See Also:
-
Constructor Summary
ConstructorsModifierConstructorDescriptionprotectedCreates aTypeDescriptorrepresenting the type parameterT.protectedTypeDescriptor(Class<?> clazz) Creates aTypeDescriptorrepresenting the type parameterT, which should resolve to a concrete type in the context of the classclazz.protectedTypeDescriptor(Object instance) Creates aTypeDescriptorrepresenting the type parameterT, which should resolve to a concrete type in the context of the classclazz. -
Method Summary
Modifier and TypeMethodDescriptionbooleanTwo type descriptor are equal if and only if they represent the same type.List<TypeDescriptor<?>> getArgumentTypes(Method method) Returns a list of argument types for the given method, which must be a part of the class.Returns a set ofTypeDescriptors, one for each superclass (including this class).Returns the component type if this type is an array type, otherwise returnsnull.Returns a set ofTypeDescriptors, one for each interface implemented by this class.final TypeDescriptor<? super T> getSupertype(Class<? super T> superclass) Returns the generic form of a supertype.getType()Returns theTyperepresented by thisTypeDescriptor.final TypeVariable<Class<? super T>> getTypeParameter(String paramName) Returns aTypeVariablefor the named type parameter.getTypes()Returns a set ofTypeDescriptor, one for each superclass as well as each interface implemented by this class.inthashCode()booleanReturns whether thisTypeDescriptorhas any unresolved type parameters, as opposed to being a concrete type.final booleanisArray()Returns true if this type is known to be an array type.final booleanisSubtypeOf(TypeDescriptor<?> parent) Return true if this type is a subtype of the given type.final booleanisSupertypeOf(TypeDescriptor<?> source) Returns true if this type is assignable from the given type.static <T> TypeDescriptor<T> Returns aTypeDescriptorrepresenting the given type.static TypeDescriptor<?> Returns aTypeDescriptorrepresenting the given type.resolveType(Type type) Returns aTypeDescriptorrepresenting the given type, with type variables resolved according to the specialization in this type.toString()A more general form ofwhere(TypeParameter, TypeDescriptor)that returns a newTypeDescriptorby matchingformalagainstactualto resolve type variables in the currentTypeDescriptor.<X> TypeDescriptor<T> where(TypeParameter<X> typeParameter, TypeDescriptor<X> typeDescriptor) Returns a newTypeDescriptorwhere the type variable represented bytypeParameterare substituted bytype.
-
Constructor Details
-
TypeDescriptor
protected TypeDescriptor()Creates aTypeDescriptorrepresenting the type parameterT. To use this constructor properly, the type parameter must be a concrete type, for examplenew TypeDescriptor<List<String>>(){}. -
TypeDescriptor
Creates aTypeDescriptorrepresenting the type parameterT, which should resolve to a concrete type in the context of the classclazz.Unlike
TypeDescriptor(Class)this will also use context's of the enclosing instances while attempting to resolve the type. This means that the types of any classes instantiated in the concrete instance should be resolvable. -
TypeDescriptor
Creates aTypeDescriptorrepresenting the type parameterT, which should resolve to a concrete type in the context of the classclazz.
-
-
Method Details
-
of
Returns aTypeDescriptorrepresenting the given type. -
of
Returns aTypeDescriptorrepresenting the given type. -
getType
Returns theTyperepresented by thisTypeDescriptor. -
getRawType
-
getComponentType
Returns the component type if this type is an array type, otherwise returnsnull. -
getSupertype
Returns the generic form of a supertype. -
isArray
public final boolean isArray()Returns true if this type is known to be an array type. -
getTypeParameter
Returns aTypeVariablefor the named type parameter. ThrowsIllegalArgumentExceptionif a type variable by the requested type parameter is not found.For example,
new TypeDescriptor<List>(){}.getTypeParameter("T")returns aTypeVariable<? super List>representing the formal type parameterT.Do not mistake the type parameters (formal type argument list) with the actual type arguments. For example, if a class
FooextendsList<String>, it does not make sense to ask for a type parameter, becauseFoodoes not have any. -
isSupertypeOf
Returns true if this type is assignable from the given type. -
isSubtypeOf
Return true if this type is a subtype of the given type. -
getArgumentTypes
Returns a list of argument types for the given method, which must be a part of the class. -
resolveType
Returns aTypeDescriptorrepresenting the given type, with type variables resolved according to the specialization in this type.For example, consider the following class:
class MyList implements List<String> { ... }The
TypeDescriptorreturned by
will represent the typeTypeDescriptor.of(MyList.class) .resolveType(Mylist.class.getMethod("get", int.class).getGenericReturnType)String. -
getTypes
Returns a set ofTypeDescriptor, one for each superclass as well as each interface implemented by this class. -
getInterfaces
Returns a set ofTypeDescriptors, one for each interface implemented by this class. -
getClasses
Returns a set ofTypeDescriptors, one for each superclass (including this class). -
where
public <X> TypeDescriptor<T> where(TypeParameter<X> typeParameter, TypeDescriptor<X> typeDescriptor) Returns a newTypeDescriptorwhere the type variable represented bytypeParameterare substituted bytype. For example, it can be used to constructMap<K, V>for anyKandVtype:static <K, V> TypeDescriptor<Map<K, V>> mapOf( TypeDescriptor<K> keyType, TypeDescriptor<V> valueType) { return new TypeDescriptor<Map<K, V>>() {} .where(new TypeParameter<K>() {}, keyType) .where(new TypeParameter<V>() {}, valueType); }- Type Parameters:
X- The parameter type- Parameters:
typeParameter- the parameter type variabletypeDescriptor- the actual type to substitute
-
where
A more general form ofwhere(TypeParameter, TypeDescriptor)that returns a newTypeDescriptorby matchingformalagainstactualto resolve type variables in the currentTypeDescriptor. -
hasUnresolvedParameters
public boolean hasUnresolvedParameters()Returns whether thisTypeDescriptorhas any unresolved type parameters, as opposed to being a concrete type.For example:
TypeDescriptor.of(new ArrayList<String>() {}.getClass()).hasUnresolvedTypeParameters() => false, because the anonymous class is instantiated with a concrete type class TestUtils { <T> ArrayList<T> createTypeErasedList() { return new ArrayList<T>() {}; } } TypeDescriptor.of(TestUtils.<String>createTypeErasedList().getClass()) => true, because the type variable T got type-erased and the anonymous ArrayList class is instantiated with an unresolved type variable T. -
toString
-
equals
Two type descriptor are equal if and only if they represent the same type. -
hashCode
public int hashCode()
-