Class TypeToken<T>


  • public class TypeToken<T>
    extends java.lang.Object
    Represents a generic type 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>.

    • Field Summary

      Fields 
      Modifier and Type Field Description
      (package private) int hashCode  
      (package private) java.lang.Class<? super T> rawType  
      (package private) java.lang.reflect.Type type  
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected TypeToken()
      Constructs a new type literal.
      (package private) TypeToken​(java.lang.reflect.Type type)
      Unsafe.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods 
      Modifier and Type Method 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​(TypeToken<?> token)
      Deprecated.
      this implementation may be inconsistent with javac for types with wildcards.
      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.
      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.
      • Methods inherited from class java.lang.Object

        clone, finalize, getClass, notify, notifyAll, wait, wait, wait
    • Field Detail

      • rawType

        final java.lang.Class<? super T> rawType
      • type

        final java.lang.reflect.Type type
      • hashCode

        final int hashCode
    • 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.

      • TypeToken

        TypeToken​(java.lang.reflect.Type type)
        Unsafe. Constructs a type literal manually.
    • Method Detail

      • getSuperclassTypeParameter

        static java.lang.reflect.Type getSuperclassTypeParameter​(java.lang.Class<?> subclass)
        Returns the type from super class's type parameter in canonical form.
      • getRawType

        public final java.lang.Class<? super T> getRawType()
        Returns the raw (non-generic) type for this type.
      • getType

        public final java.lang.reflect.Type getType()
        Gets underlying Type instance.
      • isAssignableFrom

        @Deprecated
        public boolean isAssignableFrom​(java.lang.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​(java.lang.reflect.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.
      • isAssignableFrom

        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.
      • isAssignableFrom

        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.
      • typeEquals

        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.
      • buildUnexpectedTypeError

        private static java.lang.AssertionError buildUnexpectedTypeError​(java.lang.reflect.Type token,
                                                                         java.lang.Class<?>... expected)
      • matches

        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.
      • hashCode

        public final int hashCode()
        Overrides:
        hashCode in class java.lang.Object
      • equals

        public final boolean equals​(java.lang.Object o)
        Overrides:
        equals in class java.lang.Object
      • toString

        public final java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • get

        public static TypeToken<?> get​(java.lang.reflect.Type type)
        Gets type literal for the given Type instance.
      • get

        public static <T> TypeToken<T> get​(java.lang.Class<T> type)
        Gets type literal for the given Class instance.
      • getParameterized

        public 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.
      • getArray

        public static TypeToken<?> getArray​(java.lang.reflect.Type componentType)
        Gets type literal for the array type whose elements are all instances of componentType.