- java.lang.Object
-
- com.google.gson.reflect.TypeToken<T>
-
public class TypeToken<T> extends Object
Represents a generic typeT. 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
TypeTokensubclass is not allowed, for exampleTypeToken<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 unexpectedClassCastExceptionat 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 aClass<E>representing the element type, the methodgetParameterized(Type, Type...)can be used.- Author:
- Bob Lee, Sven Mawson, Jesse Wilson
-
-
Constructor Summary
Constructors Modifier Constructor Description protectedTypeToken()Constructs a new type literal.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description booleanequals(Object o)static <T> TypeToken<T>get(Class<T> type)Gets type literal for the givenClassinstance.static TypeToken<?>get(Type type)Gets type literal for the givenTypeinstance.static TypeToken<?>getArray(Type componentType)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.Class<? super T>getRawType()Returns the raw (non-generic) type for this type.TypegetType()Gets underlyingTypeinstance.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.StringtoString()
-
-
-
Constructor Detail
-
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, for example:
new TypeToken<List<String>>() {}- Throws:
IllegalArgumentException- If the anonymousTypeTokensubclass captures a type variable, for exampleTypeToken<List<T>>. See theTypeTokenclass documentation for more details.
-
-
Method Detail
-
getRawType
public final Class<? super T> getRawType()
Returns the raw (non-generic) type for this type.
-
getType
public final Type getType()
Gets underlyingTypeinstance.
-
isAssignableFrom
@Deprecated public boolean isAssignableFrom(Class<?> cls)
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 public boolean isAssignableFrom(Type from)
Deprecated.this implementation may be inconsistent with javac for types with wildcards.Check if this type is assignable from the given Type.
-
isAssignableFrom
@Deprecated public boolean isAssignableFrom(TypeToken<?> token)
Deprecated.this implementation may be inconsistent with javac for types with wildcards.Check if this type is assignable from the given type token.
-
get
public static <T> TypeToken<T> get(Class<T> type)
Gets type literal for the givenClassinstance.
-
getParameterized
public static TypeToken<?> getParameterized(Type rawType, Type... typeArguments)
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
-
-