Package com.google.inject
Class TypeLiteral<T>
- java.lang.Object
-
- com.google.inject.TypeLiteral<T>
-
public class TypeLiteral<T> extends java.lang.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 of the type information even at runtime.For example, to create a type literal for
List<String>
, you can create an empty anonymous inner class:TypeLiteral<List<String>> list = new TypeLiteral<List<String>>() {};
Along with modeling generic types, this class can resolve type parameters. For example, to figure out what type
keySet()
returns on aMap<Integer, String>
, use this code:TypeLiteral<Map<Integer, String>> mapType = new TypeLiteral<Map<Integer, String>>() {}; TypeLiteral<?> keySetType = mapType.getReturnType(Map.class.getMethod("keySet")); System.out.println(keySetType); // prints "Set<Integer>"
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
TypeLiteral()
Constructs a new type literal.(package private)
TypeLiteral(java.lang.reflect.Type type)
Unsafe.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description boolean
equals(java.lang.Object o)
(package private) static TypeLiteral<?>
fromSuperclassTypeParameter(java.lang.Class<?> subclass)
Gets type literal from super class's type parameter.static <T> TypeLiteral<T>
get(java.lang.Class<T> type)
Gets type literal for the givenClass
instance.static TypeLiteral<?>
get(java.lang.reflect.Type type)
Gets type literal for the givenType
instance.java.util.List<TypeLiteral<?>>
getExceptionTypes(java.lang.reflect.Member methodOrConstructor)
Returns the resolved generic exception types thrown byconstructor
.TypeLiteral<?>
getFieldType(java.lang.reflect.Field field)
Returns the resolved generic type offield
.java.util.List<TypeLiteral<?>>
getParameterTypes(java.lang.reflect.Member methodOrConstructor)
Returns the resolved generic parameter types ofmethodOrConstructor
.java.lang.Class<? super T>
getRawType()
Returns the raw (non-generic) type for this type.TypeLiteral<?>
getReturnType(java.lang.reflect.Method method)
Returns the resolved generic return type ofmethod
.(package private) static java.lang.reflect.Type
getSuperclassTypeParameter(java.lang.Class<?> subclass)
Returns the type from super class's type parameter incanonical form
.TypeLiteral<?>
getSupertype(java.lang.Class<?> supertype)
Returns the generic form ofsupertype
.java.lang.reflect.Type
getType()
Gets underlyingType
instance.int
hashCode()
(package private) TypeLiteral<Provider<T>>
providerType()
Gets the type of this type's provider.(package private) TypeLiteral<?>
resolve(java.lang.reflect.Type toResolve)
Resolves known type parameters intoResolve
and returns the result.private java.util.List<TypeLiteral<?>>
resolveAll(java.lang.reflect.Type[] types)
Returns an immutable list of the resolved types.(package private) java.lang.reflect.Type
resolveType(java.lang.reflect.Type toResolve)
java.lang.String
toString()
-
-
-
Field Detail
-
rawType
final java.lang.Class<? super T> rawType
-
type
final java.lang.reflect.Type type
-
hashCode
final int hashCode
-
-
Constructor Detail
-
TypeLiteral
protected TypeLiteral()
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.
-
TypeLiteral
TypeLiteral(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 incanonical form
.
-
fromSuperclassTypeParameter
static TypeLiteral<?> fromSuperclassTypeParameter(java.lang.Class<?> subclass)
Gets type literal from super class's type parameter.
-
getRawType
public final java.lang.Class<? super T> getRawType()
Returns the raw (non-generic) type for this type.- Since:
- 2.0
-
getType
public final java.lang.reflect.Type getType()
Gets underlyingType
instance.
-
providerType
final TypeLiteral<Provider<T>> providerType()
Gets the type of this type's provider.
-
hashCode
public final int hashCode()
- Overrides:
hashCode
in classjava.lang.Object
-
equals
public final boolean equals(java.lang.Object o)
- Overrides:
equals
in classjava.lang.Object
-
toString
public final java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
get
public static TypeLiteral<?> get(java.lang.reflect.Type type)
Gets type literal for the givenType
instance.
-
get
public static <T> TypeLiteral<T> get(java.lang.Class<T> type)
Gets type literal for the givenClass
instance.
-
resolveAll
private java.util.List<TypeLiteral<?>> resolveAll(java.lang.reflect.Type[] types)
Returns an immutable list of the resolved types.
-
resolve
TypeLiteral<?> resolve(java.lang.reflect.Type toResolve)
Resolves known type parameters intoResolve
and returns the result.
-
resolveType
java.lang.reflect.Type resolveType(java.lang.reflect.Type toResolve)
-
getSupertype
public TypeLiteral<?> getSupertype(java.lang.Class<?> supertype)
Returns the generic form ofsupertype
. For example, if this isArrayList<String>
, this returnsIterable<String>
given the inputIterable.class
.- Parameters:
supertype
- a superclass of, or interface implemented by, this.- Since:
- 2.0
-
getFieldType
public TypeLiteral<?> getFieldType(java.lang.reflect.Field field)
Returns the resolved generic type offield
.- Parameters:
field
- a field defined by this or any superclass.- Since:
- 2.0
-
getParameterTypes
public java.util.List<TypeLiteral<?>> getParameterTypes(java.lang.reflect.Member methodOrConstructor)
Returns the resolved generic parameter types ofmethodOrConstructor
.- Parameters:
methodOrConstructor
- a method or constructor defined by this or any supertype.- Since:
- 2.0
-
getExceptionTypes
public java.util.List<TypeLiteral<?>> getExceptionTypes(java.lang.reflect.Member methodOrConstructor)
Returns the resolved generic exception types thrown byconstructor
.- Parameters:
methodOrConstructor
- a method or constructor defined by this or any supertype.- Since:
- 2.0
-
getReturnType
public TypeLiteral<?> getReturnType(java.lang.reflect.Method method)
Returns the resolved generic return type ofmethod
.- Parameters:
method
- a method defined by this or any supertype.- Since:
- 2.0
-
-