Class Types
- java.lang.Object
-
- org.jvnet.tiger_types.Types
-
public class Types extends java.lang.ObjectType arithmetic functions.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static classTypes.BinderArg
-
Field Summary
Fields Modifier and Type Field Description private static TypeVisitor<java.lang.reflect.Type,java.lang.Class>baseClassFinderprivate static TypeVisitor<java.lang.reflect.Type,Types.BinderArg>binderprivate static TypeVisitor<java.lang.Class,java.lang.Void>eraserImplements the logic forerasure(Type).
-
Constructor Summary
Constructors Constructor Description Types()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static java.lang.reflect.Typebind(java.lang.reflect.Type t, java.lang.reflect.GenericDeclaration decl, java.lang.reflect.ParameterizedType args)Replaces the type variables intby its actual values.static java.lang.reflect.ParameterizedTypecreateParameterizedType(java.lang.Class rawType, java.lang.reflect.Type... arguments)Returns theTypeobject that representsclazz<T1,T2,T3>.static <T> java.lang.Class<T>erasure(java.lang.reflect.Type t)Returns theClassrepresentation of the given type.private static java.lang.reflect.Typefix(java.lang.reflect.Type t)JDK 5.0 has a bug of createingGenericArrayTypewhere it shouldn't.static java.lang.reflect.TypegetBaseClass(java.lang.reflect.Type type, java.lang.Class baseType)Gets the parameterization of the given base type.static java.lang.reflect.TypegetComponentType(java.lang.reflect.Type t)Gets the component type of the array.static java.lang.reflect.TypegetTypeArgument(java.lang.reflect.Type type, int i)Gets the i-th type argument from a parameterized type.static java.lang.reflect.TypegetTypeArgument(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.StringgetTypeName(java.lang.reflect.Type type)Gets the display name of the type objectstatic booleanisArray(java.lang.reflect.Type t)Checks if the type is an array type.static booleanisArrayButNotByteArray(java.lang.reflect.Type t)Checks if the type is an array type but not byte[].static booleanisOverriding(java.lang.reflect.Method method, java.lang.Class base)Tests if the given method overrides another method defined in 'base' (or its super types.)static booleanisPrimitive(java.lang.reflect.Type type)Checks if the given type is a primitive type.static booleanisSubClassOf(java.lang.reflect.Type sub, java.lang.reflect.Type sup)Checks ifsubis a sub-type ofsup.
-
-
-
Field Detail
-
baseClassFinder
private static final TypeVisitor<java.lang.reflect.Type,java.lang.Class> baseClassFinder
-
binder
private static final TypeVisitor<java.lang.reflect.Type,Types.BinderArg> binder
-
eraser
private static final TypeVisitor<java.lang.Class,java.lang.Void> eraser
Implements the logic forerasure(Type).
-
-
Method Detail
-
bind
public static java.lang.reflect.Type bind(java.lang.reflect.Type t, java.lang.reflect.GenericDeclaration decl, java.lang.reflect.ParameterizedType args)Replaces the type variables intby its actual values.This is primarily used to resolve a method of a generic type to a concrete signature.
For example, binding
Collection<T>withT=List<String>results inCollection<List<String>>.- Parameters:
decl- provides a list of type variables. SeeGenericDeclaration.getTypeParameters()args- actual arguments. SeeParameterizedType.getActualTypeArguments()
-
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
This method works like this:interface Foo extends List - > {}
interface Bar extends Foo
{} getBaseClass( Bar, List ) = List -
getBaseClass( Bar, Foo ) = Foo
getBaseClass( Foo extends Number>, Collection ) = Collection - >
getBaseClass( ArrayList extends BigInteger>, List ) = List extends BigInteger>
- Parameters:
type- The type that derives frombaseTypebaseType- The class whose parameterization we are interested in.- Returns:
- The use of
baseTypeintype. 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 ifsubis a sub-type ofsup.
-
erasure
public static <T> java.lang.Class<T> erasure(java.lang.reflect.Type t)
Returns theClassrepresentation 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 theTypeobject that representsclazz<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 throwsIllegalArgumentExceptionif 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)=IntegerIf 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)Tests if the given method overrides another method defined in 'base' (or its super types.)
-
fix
private static java.lang.reflect.Type fix(java.lang.reflect.Type t)
JDK 5.0 has a bug of createingGenericArrayTypewhere it shouldn't. fix that manually to work around the problem. See bug 6202725.
-
-