org.jvnet.tiger_types
Class Types

java.lang.Object
  extended by org.jvnet.tiger_types.Types

public class Types
extends java.lang.Object

Type arithmetic functions.

Author:
Kohsuke Kawaguchi

Constructor Summary
Types()
           
 
Method Summary
static java.lang.reflect.ParameterizedType createParameterizedType(java.lang.Class rawType, java.lang.reflect.Type... arguments)
          Returns the Type object that represents clazz<T1,T2,T3>.
static
<T> java.lang.Class<T>
erasure(java.lang.reflect.Type t)
          Returns the Class representation of the given type.
static java.lang.reflect.Type getBaseClass(java.lang.reflect.Type type, java.lang.Class baseType)
          Gets the parameterization of the given base type.
static java.lang.reflect.Type getComponentType(java.lang.reflect.Type t)
          Gets the component type of the array.
static java.lang.reflect.Type getTypeArgument(java.lang.reflect.Type type, int i)
          Gets the i-th type argument from a parameterized type.
static java.lang.reflect.Type getTypeArgument(java.lang.reflect.Type type, int i, java.lang.reflect.Type defaultValue)
          Gets the i-th type argument from a parameterized type.
static java.lang.String getTypeName(java.lang.reflect.Type type)
          Gets the display name of the type object
static boolean isArray(java.lang.reflect.Type t)
          Checks if the type is an array type.
static boolean isArrayButNotByteArray(java.lang.reflect.Type t)
          Checks if the type is an array type but not byte[].
static boolean isOverriding(java.lang.reflect.Method method, java.lang.Class base)
           
static boolean isPrimitive(java.lang.reflect.Type type)
          Checks if the given type is a primitive type.
static boolean isSubClassOf(java.lang.reflect.Type sub, java.lang.reflect.Type sup)
          Checks if sub is a sub-type of sup.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Types

public Types()
Method Detail

getBaseClass

public static java.lang.reflect.Type getBaseClass(java.lang.reflect.Type type,
                                                  java.lang.Class baseType)
Gets the parameterization of the given base type.

For example, given the following


 interface Foo<T> extends List<List<T>> {}
 interface Bar extends Foo<String> {}
 
This method works like this:

 getBaseClass( Bar, List ) = List<List<String>
 getBaseClass( Bar, Foo  ) = Foo<String>
 getBaseClass( Foo<? extends Number>, Collection ) = Collection<List<? extends Number>>
 getBaseClass( ArrayList<? extends BigInteger>, List ) = List<? extends BigInteger>
 

Parameters:
type - The type that derives from baseType
baseType - The class whose parameterization we are interested in.
Returns:
The use of baseType in type. or null if the type is not assignable to the base type.

getTypeName

public static java.lang.String getTypeName(java.lang.reflect.Type type)
Gets the display name of the type object

Returns:
a human-readable name that the type represents.

isSubClassOf

public static boolean isSubClassOf(java.lang.reflect.Type sub,
                                   java.lang.reflect.Type sup)
Checks if sub is a sub-type of sup.


erasure

public static <T> java.lang.Class<T> erasure(java.lang.reflect.Type t)
Returns the Class representation of the given type. This corresponds to the notion of the erasure in JSR-14.

It made me realize how difficult it is to define the common navigation layer for two different underlying reflection library. The other way is to throw away the entire parameterization and go to the wrapper approach.


createParameterizedType

public static java.lang.reflect.ParameterizedType createParameterizedType(java.lang.Class rawType,
                                                                          java.lang.reflect.Type... arguments)
Returns the Type object that represents clazz&lt;T1,T2,T3>.


isArray

public static boolean isArray(java.lang.reflect.Type t)
Checks if the type is an array type.


isArrayButNotByteArray

public static boolean isArrayButNotByteArray(java.lang.reflect.Type t)
Checks if the type is an array type but not byte[].


getComponentType

public static java.lang.reflect.Type getComponentType(java.lang.reflect.Type t)
Gets the component type of the array.

Parameters:
t - must be an array.

getTypeArgument

public static java.lang.reflect.Type getTypeArgument(java.lang.reflect.Type type,
                                                     int i)
Gets the i-th type argument from a parameterized type.

Unlike getTypeArgument(Type, int, Type), this method throws IllegalArgumentException if the given type is not parameterized.


getTypeArgument

public static java.lang.reflect.Type getTypeArgument(java.lang.reflect.Type type,
                                                     int i,
                                                     java.lang.reflect.Type defaultValue)
Gets the i-th type argument from a parameterized type.

For example, getTypeArgument([Map<Integer,String>],0)=Integer If the given type is not a parameterized type, returns the specified default value.

This is convenient for handling raw types and parameterized types uniformly.

Throws:
java.lang.IndexOutOfBoundsException - If i is out of range.

isPrimitive

public static boolean isPrimitive(java.lang.reflect.Type type)
Checks if the given type is a primitive type.


isOverriding

public static boolean isOverriding(java.lang.reflect.Method method,
                                   java.lang.Class base)


Copyright © 2011. All Rights Reserved.