Class TypeToken<T>
- All Implemented Interfaces:
Serializable
Type with generics.
Operations that are otherwise only available in Class are implemented to support
Type, for example isAssignableFrom(com.google.common.reflect.TypeToken<?>), isArray() and getComponentType(). It also provides additional utilities such as getTypes() and resolveType(java.lang.reflect.Type) etc.
There are three ways to get a TypeToken instance:
- Wrap a
Typeobtained via reflection. For example:TypeToken.of(method.getGenericReturnType()). - Capture a generic type with a (usually anonymous) subclass. For example:
new TypeToken<List<String>>() {}Note that it's critical that the actual type argument is carried by a subclass. The following code is wrong because it only captures the
<T>type variable of thelistType()method signature; while<String>is lost in erasure:class Util { static <T> TypeToken<List<T>> listType() { return new TypeToken<List<T>>() {}; } } TypeToken<List<String>> stringListType = Util.<String>listType(); - Capture a generic type with a (usually anonymous) subclass and resolve it against
a context class that knows what the type parameters are. For example:
abstract class IKnowMyType<T> { TypeToken<T> type = new TypeToken<T>(getClass()) {}; } new IKnowMyType<String>() {}.type => String
TypeToken is serializable when no type variable is contained in the type.
Note to Guice users: TypeToken is similar to Guice's TypeLiteral class
except that it is serializable and offers numerous additional utility methods.
- Since:
- 12.0
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionclassDeprecated.The Google Guava Core Libraries are deprecated and will not be part of the AEM SDK after April 2023 -
Method Summary
Modifier and TypeMethodDescriptionconstructor(Constructor<?> constructor) Deprecated.booleanDeprecated.final TypeToken<?> Deprecated.Returns the array component type if this type represents an array (int[],T[],<? extends Map<String, Integer>[]>etc.), or elsenullis returned.Deprecated.Returns the raw type ofT.getSubtype(Class<?> subclass) Deprecated.Returns subtype ofthiswithsubclassas the raw class.getSupertype(Class<? super T> superclass) Deprecated.Returns the generic form ofsuperclass.final TypegetType()Deprecated.Returns the represented type.getTypes()Deprecated.Returns the set of interfaces and classes that this type is or is a subtype of.inthashCode()Deprecated.final booleanisArray()Deprecated.Returns true if this type is known to be an array type, such asint[],T[],<? extends Map<String, Integer>[]>etc.final booleanisAssignableFrom(TypeToken<?> type) Deprecated.Returns true if this type is assignable from the giventype.final booleanisAssignableFrom(Type type) Deprecated.Check if this type is assignable from the giventype.final booleanDeprecated.Returns true if this type is one of the nine primitive types (includingvoid).Deprecated.static <T> TypeToken<T> Deprecated.Returns an instance of type token that wrapstype.static TypeToken<?> Deprecated.Returns an instance of type token that wrapstype.final TypeToken<?> resolveType(Type type) Deprecated.Resolves the giventypeagainst the type context represented by this type.toString()Deprecated.unwrap()Deprecated.Returns the corresponding primitive type if this is a wrapper type; otherwise returnsthisitself.where(TypeParameter<X> typeParam, TypeToken<X> typeArg) Deprecated.Returns a newTypeTokenwhere type variables represented bytypeParamare substituted bytypeArg.where(TypeParameter<X> typeParam, Class<X> typeArg) Deprecated.Returns a newTypeTokenwhere type variables represented bytypeParamare substituted bytypeArg.wrap()Deprecated.Returns the corresponding wrapper type if this is a primitive type; otherwise returnsthisitself.
-
Method Details
-
of
Deprecated.Returns an instance of type token that wrapstype. -
of
Deprecated.Returns an instance of type token that wrapstype. -
getRawType
Deprecated.Returns the raw type ofT. Formally speaking, ifTis returned byMethod.getGenericReturnType(), the raw type is what's returned byMethod.getReturnType()of the same method object. Specifically:- If
Tis aClassitself,Titself is returned. - If
Tis aParameterizedType, the raw type of the parameterized type is returned. - If
Tis aGenericArrayType, the returned type is the corresponding array class. For example:List<Integer>[] => List[]. - If
Tis a type variable or a wildcard type, the raw type of the first upper bound is returned. For example:<X extends Foo> => Foo.
- If
-
getType
Deprecated.Returns the represented type. -
where
Deprecated.Returns a new
TypeTokenwhere type variables represented bytypeParamare substituted bytypeArg. For example, it can be used to constructMap<K, V>for anyKandVtype:static <K, V> TypeToken<Map<K, V>> mapOf( TypeToken<K> keyType, TypeToken<V> valueType) { return new TypeToken<Map<K, V>>() {} .where(new TypeParameter<K>() {}, keyType) .where(new TypeParameter<V>() {}, valueType); }- Type Parameters:
X- The parameter type- Parameters:
typeParam- the parameter type variabletypeArg- the actual type to substitute
-
where
Deprecated.Returns a new
TypeTokenwhere type variables represented bytypeParamare substituted bytypeArg. For example, it can be used to constructMap<K, V>for anyKandVtype:static <K, V> TypeToken<Map<K, V>> mapOf( Class<K> keyType, Class<V> valueType) { return new TypeToken<Map<K, V>>() {} .where(new TypeParameter<K>() {}, keyType) .where(new TypeParameter<V>() {}, valueType); }- Type Parameters:
X- The parameter type- Parameters:
typeParam- the parameter type variabletypeArg- the actual type to substitute
-
resolveType
Deprecated.Resolves the given
typeagainst the type context represented by this type. For example:new TypeToken<List<String>>() {}.resolveType( List.class.getMethod("get", int.class).getGenericReturnType()) => String.class -
getTypes
Deprecated.Returns the set of interfaces and classes that this type is or is a subtype of. The returned types are parameterized with proper type arguments.Subtypes are always listed before supertypes. But the reverse is not true. A type isn't necessarily a subtype of all the types following. Order between types without subtype relationship is arbitrary and not guaranteed.
If this type is a type variable or wildcard, upper bounds that are themselves type variables aren't included (their super interfaces and superclasses are).
-
getSupertype
Deprecated.Returns the generic form ofsuperclass. For example, if this isArrayList<String>,Iterable<String>is returned given the inputIterable.class. -
getSubtype
Deprecated.Returns subtype ofthiswithsubclassas the raw class. For example, if this isIterable<String>andsubclassisList,List<String>is returned. -
isAssignableFrom
Deprecated.Returns true if this type is assignable from the giventype. -
isAssignableFrom
Deprecated.Check if this type is assignable from the giventype. -
isArray
public final boolean isArray()Deprecated.Returns true if this type is known to be an array type, such asint[],T[],<? extends Map<String, Integer>[]>etc. -
isPrimitive
public final boolean isPrimitive()Deprecated.Returns true if this type is one of the nine primitive types (includingvoid).- Since:
- 15.0
-
wrap
Deprecated.Returns the corresponding wrapper type if this is a primitive type; otherwise returnsthisitself. Idempotent.- Since:
- 15.0
-
unwrap
Deprecated.Returns the corresponding primitive type if this is a wrapper type; otherwise returnsthisitself. Idempotent.- Since:
- 15.0
-
getComponentType
Deprecated.Returns the array component type if this type represents an array (int[],T[],<? extends Map<String, Integer>[]>etc.), or elsenullis returned. -
method
Deprecated.- Since:
- 14.0
-
constructor
Deprecated.- Since:
- 14.0
-
equals
Deprecated. -
hashCode
public int hashCode()Deprecated. -
toString
Deprecated.
-