public class MethodGenericsContext extends GenericsContext
class A {
<T> T method();
}
Such generics are not known in type and as a result any operation on type with such generic will lead to
unknown generic.
Also, context contains special methods for parameters and return type analysis.
currentType, genericsInfo, typeGenerics| Constructor and Description |
|---|
MethodGenericsContext(GenericsInfo genericsInfo,
java.lang.Class<?> type,
java.lang.reflect.Method method) |
| Modifier and Type | Method and Description |
|---|---|
protected java.util.Map<java.lang.String,java.lang.reflect.Type> |
contextGenerics() |
java.lang.reflect.Method |
currentMethod() |
java.util.Map<java.lang.String,java.lang.reflect.Type> |
methodGenericsMap()
class A<E> {
<T, K extends E> K method(T arg);
}
class B extends A<Serializable>
context.method(A.getMethod("method", Object.class)).methodGenericsMap() ==
["T": Object.class, "K": Serializable.class]
For method generics it's impossible to know actual type (available only in time of method call),
so generics resolved as lower bound. |
java.util.List<java.lang.reflect.Type> |
methodGenericTypes()
<T extends Serializable> T method();. |
java.util.List<java.lang.Class<?>> |
resolveParameters()
Useful for introspection, to know exact parameter types.
|
java.lang.Class<?> |
resolveReturnClass()
Useful for introspection, to know exact return type of generified method.
|
java.lang.Class<?> |
resolveReturnTypeGeneric()
Shortcut for
resolveReturnTypeGenerics() useful for single generic types or
when just first generic required. |
java.util.List<java.lang.Class<?>> |
resolveReturnTypeGenerics()
Useful for introspection, to know exact generic value.
|
currentClass, generic, generic, genericAsString, genericAsString, generics, genericsAsString, genericsMap, genericType, genericType, genericTypes, getGenericsInfo, method, resolveClass, resolveGenericOf, resolveGenericsOf, toStringType, typepublic MethodGenericsContext(GenericsInfo genericsInfo, java.lang.Class<?> type, java.lang.reflect.Method method)
public java.lang.reflect.Method currentMethod()
public java.util.List<java.lang.reflect.Type> methodGenericTypes()
<T extends Serializable> T method();.
context.method(B.getMethod('method')).methodGenericTypes() == [Class<Serializable>]public java.util.Map<java.lang.String,java.lang.reflect.Type> methodGenericsMap()
class A<E> {
<T, K extends E> K method(T arg);
}
class B extends A<Serializable>
context.method(A.getMethod("method", Object.class)).methodGenericsMap() ==
["T": Object.class, "K": Serializable.class]
For method generics it's impossible to know actual type (available only in time of method call),
so generics resolved as lower bound.public java.lang.Class<?> resolveReturnClass()
class A extends B<Long>;
class B<T> {
T doSmth();
}
Resolving return type in type of root class:
type(B.class).resolveReturnClass(B.class.getMethod("doSmth")) == Long.classGenericsContext.resolveClass(java.lang.reflect.Type)public java.util.List<java.lang.Class<?>> resolveParameters()
class A extends B<Long>;
class B<T> {
void doSmth(T a, Integer b);
}
Resolving parameters in context of root class:
type(B.class).resolveParameters(B.class.getMethod("doSmth", Object.class)) ==
[Long.class, Integer.class]public java.util.List<java.lang.Class<?>> resolveReturnTypeGenerics()
throws NoGenericException
class A extends B<Long>;
class B<T> {
List<T> doSmth();
}
Resolving parameters in context of root class:
type(B.class).method(B.class.getMethod("doSmth")).resolveReturnTypeGenerics() == [Long.class]NoGenericException - if provided type does not contain generic (exception required to distinguish
Object.class generic value from class which doesn't support genericpublic java.lang.Class<?> resolveReturnTypeGeneric()
throws NoGenericException
resolveReturnTypeGenerics() useful for single generic types or
when just first generic required.NoGenericException - if provided type does not contain generic (exception required to distinguish
Object.class generic value from class which doesn't support genericprotected java.util.Map<java.lang.String,java.lang.reflect.Type> contextGenerics()
contextGenerics in class GenericsContext