T
- the type that owns this method or constructor.R
- the return type of (or supertype thereof) the method or the declaring type of the
constructor.@Beta public abstract class Invokable<T,R> extends Element implements java.lang.reflect.GenericDeclaration
Method
or a Constructor
. Convenience API is provided to
make common reflective operation easier to deal with, such as Element.isPublic()
,
getParameters()
etc.
In addition to convenience methods, TypeToken.method(java.lang.reflect.Method)
and TypeToken.constructor(java.lang.reflect.Constructor<?>)
will resolve the type parameters of the method or constructor in the context of the owner type,
which may be a subtype of the declaring class. For example:
Method getMethod = List.class.getMethod("get", int.class);
Invokable<List<String>, ?> invokable = new TypeToken<List<String>>() {}.method(getMethod);
assertEquals(TypeToken.of(String.class), invokable.getReturnType()); // Not Object.class!
assertEquals(new TypeToken<List<String>>() {}, invokable.getOwnerType());
Modifier and Type | Class and Description |
---|---|
(package private) static class |
Invokable.ConstructorInvokable<T> |
(package private) static class |
Invokable.MethodInvokable<T> |
Constructor and Description |
---|
Invokable(M member) |
Modifier and Type | Method and Description |
---|---|
static <T> Invokable<T,T> |
from(java.lang.reflect.Constructor<T> constructor)
Returns
Invokable of constructor . |
static Invokable<?,java.lang.Object> |
from(java.lang.reflect.Method method)
Returns
Invokable of method . |
java.lang.Class<? super T> |
getDeclaringClass() |
ImmutableList<TypeToken<? extends java.lang.Throwable>> |
getExceptionTypes()
Returns all declared exception types of this
Invokable . |
(package private) abstract java.lang.reflect.Type[] |
getGenericExceptionTypes()
This should never return a type that's not a subtype of Throwable.
|
(package private) abstract java.lang.reflect.Type[] |
getGenericParameterTypes() |
(package private) abstract java.lang.reflect.Type |
getGenericReturnType() |
TypeToken<T> |
getOwnerType()
Returns the type of
T . |
(package private) abstract java.lang.annotation.Annotation[][] |
getParameterAnnotations() |
ImmutableList<Parameter> |
getParameters()
Returns all declared parameters of this
Invokable . |
TypeToken<? extends R> |
getReturnType()
Returns the return type of this
Invokable . |
R |
invoke(T receiver,
java.lang.Object... args)
Invokes with
receiver as 'this' and args passed to the underlying method and
returns the return value; or calls the underlying constructor with args and returns the
constructed instance. |
(package private) abstract java.lang.Object |
invokeInternal(java.lang.Object receiver,
java.lang.Object[] args) |
abstract boolean |
isOverridable()
Returns
true if this is an overridable method. |
abstract boolean |
isVarArgs()
Returns
true if this was declared to take a variable number of arguments. |
<R1 extends R> |
returning(java.lang.Class<R1> returnType)
Explicitly specifies the return type of this
Invokable . |
<R1 extends R> |
returning(TypeToken<R1> returnType)
Explicitly specifies the return type of this
Invokable . |
equals, getAnnotation, getAnnotations, getDeclaredAnnotations, getModifiers, getName, hashCode, isAbstract, isAccessible, isAnnotationPresent, isFinal, isNative, isPackagePrivate, isPrivate, isProtected, isPublic, isStatic, isSynchronized, isSynthetic, isTransient, isVolatile, setAccessible, toString
getAnnotationsByType, getDeclaredAnnotation, getDeclaredAnnotationsByType, setAccessible
public static Invokable<?,java.lang.Object> from(java.lang.reflect.Method method)
Invokable
of method
.public static <T> Invokable<T,T> from(java.lang.reflect.Constructor<T> constructor)
Invokable
of constructor
.public abstract boolean isOverridable()
true
if this is an overridable method. Constructors, private, static or final
methods, or methods declared by final classes are not overridable.public abstract boolean isVarArgs()
true
if this was declared to take a variable number of arguments.public final R invoke(@Nullable T receiver, java.lang.Object... args) throws java.lang.reflect.InvocationTargetException, java.lang.IllegalAccessException
receiver
as 'this' and args
passed to the underlying method and
returns the return value; or calls the underlying constructor with args
and returns the
constructed instance.java.lang.IllegalAccessException
- if this Constructor
object enforces Java language access
control and the underlying method or constructor is inaccessible.java.lang.IllegalArgumentException
- if the number of actual and formal parameters differ; if an
unwrapping conversion for primitive arguments fails; or if, after possible unwrapping, a
parameter value cannot be converted to the corresponding formal parameter type by a method
invocation conversion.java.lang.reflect.InvocationTargetException
- if the underlying method or constructor throws an exception.public final TypeToken<? extends R> getReturnType()
Invokable
.public final ImmutableList<Parameter> getParameters()
Invokable
. Note that if this is a constructor
of a non-static inner class, unlike Constructor.getParameterTypes()
, the hidden
this
parameter of the enclosing class is excluded from the returned parameters.public final ImmutableList<TypeToken<? extends java.lang.Throwable>> getExceptionTypes()
Invokable
.public final <R1 extends R> Invokable<T,R1> returning(java.lang.Class<R1> returnType)
Invokable
. For example:
Method factoryMethod = Person.class.getMethod("create");
Invokable<?, Person> factory = Invokable.of(getNameMethod).returning(Person.class);
public final <R1 extends R> Invokable<T,R1> returning(TypeToken<R1> returnType)
Invokable
.public final java.lang.Class<? super T> getDeclaringClass()
getDeclaringClass
in interface java.lang.reflect.Member
getDeclaringClass
in class Element
public TypeToken<T> getOwnerType()
T
.getOwnerType
in class Element
abstract java.lang.Object invokeInternal(@Nullable java.lang.Object receiver, java.lang.Object[] args) throws java.lang.reflect.InvocationTargetException, java.lang.IllegalAccessException
java.lang.reflect.InvocationTargetException
java.lang.IllegalAccessException
abstract java.lang.reflect.Type[] getGenericParameterTypes()
abstract java.lang.reflect.Type[] getGenericExceptionTypes()
abstract java.lang.annotation.Annotation[][] getParameterAnnotations()
abstract java.lang.reflect.Type getGenericReturnType()