Class TypeToken<T>
T. Java doesn't yet provide a way to
represent generic types, so this class does. Forces clients to create a
subclass of this class which enables retrieval the type information even at
runtime.
For example, to create a type literal for List<String>, you can
create an empty anonymous class:
TypeToken<List<String>> list = new TypeToken<List<String>>() {};
Capturing a type variable as type argument of a TypeToken should
be avoided. Due to type erasure the runtime type of a type variable is not
available to Gson and therefore it cannot provide the functionality one
might expect, which gives a false sense of type-safety at compilation time
and can lead to an unexpected ClassCastException at runtime.
If the type arguments of the parameterized type are only available at
runtime, for example when you want to create a List<E> based on
a Class<E> representing the element type, the method
getParameterized(Type, Type...) can be used.
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static AssertionErrorbuildUnexpectedTypeError(Type token, Class<?>... expected) final booleanstatic <T> TypeToken<T> Gets type literal for the givenClassinstance.static TypeToken<?> Gets type literal for the givenTypeinstance.static TypeToken<?> Gets type literal for the array type whose elements are all instances ofcomponentType.static TypeToken<?> getParameterized(Type rawType, Type... typeArguments) Gets a type literal for the parameterized type represented by applyingtypeArgumentstorawType.Returns the raw (non-generic) type for this type.final TypegetType()Gets underlyingTypeinstance.private TypeVerifies thatthisis an instance of a direct subclass of TypeToken and returns the type argument forTincanonical form.final inthashCode()booleanisAssignableFrom(TypeToken<?> token) Deprecated.this implementation may be inconsistent with javac for types with wildcards.booleanisAssignableFrom(Class<?> cls) Deprecated.this implementation may be inconsistent with javac for types with wildcards.booleanisAssignableFrom(Type from) Deprecated.this implementation may be inconsistent with javac for types with wildcards.private static booleanisAssignableFrom(Type from, GenericArrayType to) Private helper function that performs some assignability checks for the provided GenericArrayType.private static booleanisAssignableFrom(Type from, ParameterizedType to, Map<String, Type> typeVarMap) Private recursive helper function to actually do the type-safe checking of assignability.private static booleanChecks if two types are the same or are equivalent under a variable mapping given in the type map that was provided.final StringtoString()private static booleantypeEquals(ParameterizedType from, ParameterizedType to, Map<String, Type> typeVarMap) Checks if two parameterized types are exactly equal, under the variable replacement described in the typeVarMap.
-
Field Details
-
rawType
-
type
-
hashCode
private final int hashCode
-
-
Constructor Details
-
TypeToken
protected TypeToken()Constructs a new type literal. Derives represented class from type parameter.Clients create an empty anonymous subclass. Doing so embeds the type parameter in the anonymous class's type hierarchy so we can reconstitute it at runtime despite erasure.
-
TypeToken
Unsafe. Constructs a type literal manually.
-
-
Method Details
-
getTypeTokenTypeArgument
Verifies thatthisis an instance of a direct subclass of TypeToken and returns the type argument forTincanonical form. -
getRawType
Returns the raw (non-generic) type for this type. -
getType
Gets underlyingTypeinstance. -
isAssignableFrom
Deprecated.this implementation may be inconsistent with javac for types with wildcards.Check if this type is assignable from the given class object. -
isAssignableFrom
Deprecated.this implementation may be inconsistent with javac for types with wildcards.Check if this type is assignable from the given Type. -
isAssignableFrom
Deprecated.this implementation may be inconsistent with javac for types with wildcards.Check if this type is assignable from the given type token. -
isAssignableFrom
Private helper function that performs some assignability checks for the provided GenericArrayType. -
isAssignableFrom
private static boolean isAssignableFrom(Type from, ParameterizedType to, Map<String, Type> typeVarMap) Private recursive helper function to actually do the type-safe checking of assignability. -
typeEquals
private static boolean typeEquals(ParameterizedType from, ParameterizedType to, Map<String, Type> typeVarMap) Checks if two parameterized types are exactly equal, under the variable replacement described in the typeVarMap. -
buildUnexpectedTypeError
-
matches
Checks if two types are the same or are equivalent under a variable mapping given in the type map that was provided. -
hashCode
public final int hashCode() -
equals
-
toString
-
get
Gets type literal for the givenTypeinstance. -
get
Gets type literal for the givenClassinstance. -
getParameterized
Gets a type literal for the parameterized type represented by applyingtypeArgumentstorawType. This is mainly intended for situations where the type arguments are not available at compile time. The following example shows how a type token forMap<K, V>can be created:
As seen here the result is aClass<K> keyClass = ...; Class<V> valueClass = ...; TypeToken<?> mapTypeToken = TypeToken.getParameterized(Map.class, keyClass, valueClass);TypeToken<?>; this method cannot provide any type safety, and care must be taken to pass in the correct number of type arguments.- Throws:
IllegalArgumentException- IfrawTypeis not of typeClass, or if the type arguments are invalid for the raw type
-
getArray
Gets type literal for the array type whose elements are all instances ofcomponentType.
-