public class TypeToken<T>
extends java.lang.Object
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 inner class:
TypeToken<List<String>> list = new TypeToken<List<String>>() {};
This syntax cannot be used to create type literals that have wildcard
parameters, such as Class<?>
or List<? extends CharSequence>
.
Modifier and Type | Field and Description |
---|---|
(package private) int |
hashCode |
(package private) java.lang.Class<? super T> |
rawType |
(package private) java.lang.reflect.Type |
type |
Modifier | Constructor and Description |
---|---|
protected |
TypeToken()
Constructs a new type literal.
|
(package private) |
TypeToken(java.lang.reflect.Type type)
Unsafe.
|
Modifier and Type | Method and Description |
---|---|
private static java.lang.AssertionError |
buildUnexpectedTypeError(java.lang.reflect.Type token,
java.lang.Class<?>... expected) |
boolean |
equals(java.lang.Object o) |
static <T> TypeToken<T> |
get(java.lang.Class<T> type)
Gets type literal for the given
Class instance. |
static TypeToken<?> |
get(java.lang.reflect.Type type)
Gets type literal for the given
Type instance. |
static TypeToken<?> |
getArray(java.lang.reflect.Type componentType)
Gets type literal for the array type whose elements are all instances of
componentType . |
static TypeToken<?> |
getParameterized(java.lang.reflect.Type rawType,
java.lang.reflect.Type... typeArguments)
Gets type literal for the parameterized type represented by applying
typeArguments to
rawType . |
java.lang.Class<? super T> |
getRawType()
Returns the raw (non-generic) type for this type.
|
(package private) static java.lang.reflect.Type |
getSuperclassTypeParameter(java.lang.Class<?> subclass)
Returns the type from super class's type parameter in
canonical form . |
java.lang.reflect.Type |
getType()
Gets underlying
Type instance. |
int |
hashCode() |
boolean |
isAssignableFrom(java.lang.Class<?> cls)
Deprecated.
this implementation may be inconsistent with javac for types
with wildcards.
|
boolean |
isAssignableFrom(java.lang.reflect.Type from)
Deprecated.
this implementation may be inconsistent with javac for types
with wildcards.
|
private static boolean |
isAssignableFrom(java.lang.reflect.Type from,
java.lang.reflect.GenericArrayType to)
Private helper function that performs some assignability checks for
the provided GenericArrayType.
|
private static boolean |
isAssignableFrom(java.lang.reflect.Type from,
java.lang.reflect.ParameterizedType to,
java.util.Map<java.lang.String,java.lang.reflect.Type> typeVarMap)
Private recursive helper function to actually do the type-safe checking
of assignability.
|
boolean |
isAssignableFrom(TypeToken<?> token)
Deprecated.
this implementation may be inconsistent with javac for types
with wildcards.
|
private static boolean |
matches(java.lang.reflect.Type from,
java.lang.reflect.Type to,
java.util.Map<java.lang.String,java.lang.reflect.Type> typeMap)
Checks if two types are the same or are equivalent under a variable mapping
given in the type map that was provided.
|
java.lang.String |
toString() |
private static boolean |
typeEquals(java.lang.reflect.ParameterizedType from,
java.lang.reflect.ParameterizedType to,
java.util.Map<java.lang.String,java.lang.reflect.Type> typeVarMap)
Checks if two parameterized types are exactly equal, under the variable
replacement described in the typeVarMap.
|
final java.lang.Class<? super T> rawType
final java.lang.reflect.Type type
final int hashCode
protected TypeToken()
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(java.lang.reflect.Type type)
static java.lang.reflect.Type getSuperclassTypeParameter(java.lang.Class<?> subclass)
canonical form
.public final java.lang.Class<? super T> getRawType()
public final java.lang.reflect.Type getType()
Type
instance.@Deprecated public boolean isAssignableFrom(java.lang.Class<?> cls)
@Deprecated public boolean isAssignableFrom(java.lang.reflect.Type from)
@Deprecated public boolean isAssignableFrom(TypeToken<?> token)
private static boolean isAssignableFrom(java.lang.reflect.Type from, java.lang.reflect.GenericArrayType to)
private static boolean isAssignableFrom(java.lang.reflect.Type from, java.lang.reflect.ParameterizedType to, java.util.Map<java.lang.String,java.lang.reflect.Type> typeVarMap)
private static boolean typeEquals(java.lang.reflect.ParameterizedType from, java.lang.reflect.ParameterizedType to, java.util.Map<java.lang.String,java.lang.reflect.Type> typeVarMap)
private static java.lang.AssertionError buildUnexpectedTypeError(java.lang.reflect.Type token, java.lang.Class<?>... expected)
private static boolean matches(java.lang.reflect.Type from, java.lang.reflect.Type to, java.util.Map<java.lang.String,java.lang.reflect.Type> typeMap)
public final int hashCode()
hashCode
in class java.lang.Object
public final boolean equals(java.lang.Object o)
equals
in class java.lang.Object
public final java.lang.String toString()
toString
in class java.lang.Object
public static TypeToken<?> get(java.lang.reflect.Type type)
Type
instance.public static <T> TypeToken<T> get(java.lang.Class<T> type)
Class
instance.public static TypeToken<?> getParameterized(java.lang.reflect.Type rawType, java.lang.reflect.Type... typeArguments)
typeArguments
to
rawType
.public static TypeToken<?> getArray(java.lang.reflect.Type componentType)
componentType
.