Class TypeReference<T>

  • All Implemented Interfaces:
    java.lang.Comparable<TypeReference<T>>

    public abstract class TypeReference<T>
    extends java.lang.Object
    implements java.lang.Comparable<TypeReference<T>>
    This class is used to pass full generics type information, and avoid problems with type erasure (that basically removes most usable type references from runtime Class objects). It is based on ideas from http://gafter.blogspot.com/2006/12/super-type-tokens.html, Additional idea (from a suggestion made in comments of the article) is to require bogus implementation of Comparable (any such generic interface would do, as long as it forces a method with generic type to be implemented). to ensure that a Type argument is indeed given.

    Usage is by sub-classing: here is one way to instantiate reference to generic type List<Integer>:

      TypeReference ref = new TypeReference<List<Integer>>() { };
    
    which can be passed to methods that accept TypeReference.
    • Constructor Summary

      Constructors 
      Modifier Constructor Description
      protected TypeReference()  
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      int compareTo​(TypeReference<T> o)
      The only reason we define this method (and require implementation of Comparable) is to prevent constructing a reference without type information.
      java.lang.reflect.Type getType()  
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • TypeReference

        protected TypeReference()
    • Method Detail

      • getType

        public java.lang.reflect.Type getType()
      • compareTo

        public int compareTo​(TypeReference<T> o)
        The only reason we define this method (and require implementation of Comparable) is to prevent constructing a reference without type information.
        Specified by:
        compareTo in interface java.lang.Comparable<T>