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 an anonymous TypeToken subclass is not
allowed, for example TypeToken<List<T>>. 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. This would give a false sense of type-safety at compile time and could 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.
-
Method Summary
Modifier and TypeMethodDescriptionfinal 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.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.final StringtoString()
-
Method Details
-
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. -
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.If
rawTypeis a non-generic class and no type arguments are provided, this method simply delegates toget(Class)and creates aTypeToken(Class).- 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.
-