Class Invokable<T,R>
- java.lang.Object
-
- com.google.common.reflect.Invokable<T,R>
-
- Type Parameters:
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.
- All Implemented Interfaces:
java.lang.reflect.AnnotatedElement,java.lang.reflect.Member
- Direct Known Subclasses:
Invokable.ConstructorInvokable,Invokable.MethodInvokable
public abstract class Invokable<T,R> extends java.lang.Object implements java.lang.reflect.AnnotatedElement, java.lang.reflect.MemberWrapper around either aMethodor aConstructor. Convenience API is provided to make common reflective operation easier to deal with, such asisPublic(),getParameters()etc.In addition to convenience methods,
TypeToken.method(java.lang.reflect.Method)andTypeToken.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());Note: earlier versions of this class inherited from
AccessibleObjectandGenericDeclaration. Since version 31.0 that is no longer the case. However, most methods from those types are present with the same signature in this class.- Since:
- 14.0 (no longer implements
AccessibleObjectorGenericDeclarationsince 31.0)
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) static classInvokable.ConstructorInvokable<T>(package private) static classInvokable.MethodInvokable<T>
-
Field Summary
Fields Modifier and Type Field Description private java.lang.reflect.AccessibleObjectaccessibleObjectprivate java.lang.reflect.Membermember
-
Constructor Summary
Constructors Constructor Description Invokable(M member)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description booleanequals(java.lang.Object obj)static <T> Invokable<T,T>from(java.lang.reflect.Constructor<T> constructor)ReturnsInvokableofconstructor.static Invokable<?,java.lang.Object>from(java.lang.reflect.Method method)ReturnsInvokableofmethod.(package private) abstract java.lang.reflect.AnnotatedType[]getAnnotatedParameterTypes()abstract java.lang.reflect.AnnotatedTypegetAnnotatedReturnType()<A extends java.lang.annotation.Annotation>
AgetAnnotation(java.lang.Class<A> annotationClass)java.lang.annotation.Annotation[]getAnnotations()java.lang.annotation.Annotation[]getDeclaredAnnotations()java.lang.Class<? super T>getDeclaringClass()ImmutableList<TypeToken<? extends java.lang.Throwable>>getExceptionTypes()Returns all declared exception types of thisInvokable.(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.TypegetGenericReturnType()intgetModifiers()java.lang.StringgetName()TypeToken<T>getOwnerType()Returns the type ofT.(package private) abstract java.lang.annotation.Annotation[][]getParameterAnnotations()ImmutableList<Parameter>getParameters()Returns all declared parameters of thisInvokable.TypeToken<? extends R>getReturnType()Returns the return type of thisInvokable.abstract java.lang.reflect.TypeVariable<?>[]getTypeParameters()SeeGenericDeclaration.getTypeParameters().inthashCode()Rinvoke(T receiver, java.lang.Object... args)Invokes withreceiveras 'this' andargspassed to the underlying method and returns the return value; or calls the underlying constructor withargsand returns the constructed instance.(package private) abstract java.lang.ObjectinvokeInternal(java.lang.Object receiver, java.lang.Object[] args)booleanisAbstract()Returns true if the method is abstract.booleanisAccessible()SeeAccessibleObject.isAccessible().booleanisAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation> annotationClass)booleanisFinal()Returnstrueif this method is final, perModifier.isFinal(getModifiers()).booleanisNative()Returns true if the element is native.abstract booleanisOverridable()Returnstrueif this is an overridable method.booleanisPackagePrivate()Returns true if the element is package-private.booleanisPrivate()Returns true if the element is private.booleanisProtected()Returns true if the element is protected.booleanisPublic()Returns true if the element is public.booleanisStatic()Returns true if the element is static.booleanisSynchronized()Returns true if the method is synchronized.booleanisSynthetic()(package private) booleanisTransient()Returns true if the field is transient.abstract booleanisVarArgs()Returnstrueif this was declared to take a variable number of arguments.(package private) booleanisVolatile()Returns true if the field is volatile.<R1 extends R>
Invokable<T,R1>returning(TypeToken<R1> returnType)Explicitly specifies the return type of thisInvokable.<R1 extends R>
Invokable<T,R1>returning(java.lang.Class<R1> returnType)Explicitly specifies the return type of thisInvokable.voidsetAccessible(boolean flag)SeeAccessibleObject.setAccessible(boolean).java.lang.StringtoString()booleantrySetAccessible()SeeAccessibleObject.trySetAccessible().
-
-
-
Method Detail
-
from
public static Invokable<?,java.lang.Object> from(java.lang.reflect.Method method)
ReturnsInvokableofmethod.
-
from
public static <T> Invokable<T,T> from(java.lang.reflect.Constructor<T> constructor)
ReturnsInvokableofconstructor.
-
isAnnotationPresent
public final boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation> annotationClass)
- Specified by:
isAnnotationPresentin interfacejava.lang.reflect.AnnotatedElement
-
getAnnotation
@CheckForNull public final <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A> annotationClass)
- Specified by:
getAnnotationin interfacejava.lang.reflect.AnnotatedElement
-
getAnnotations
public final java.lang.annotation.Annotation[] getAnnotations()
- Specified by:
getAnnotationsin interfacejava.lang.reflect.AnnotatedElement
-
getDeclaredAnnotations
public final java.lang.annotation.Annotation[] getDeclaredAnnotations()
- Specified by:
getDeclaredAnnotationsin interfacejava.lang.reflect.AnnotatedElement
-
getTypeParameters
public abstract java.lang.reflect.TypeVariable<?>[] getTypeParameters()
SeeGenericDeclaration.getTypeParameters().
-
setAccessible
public final void setAccessible(boolean flag)
SeeAccessibleObject.setAccessible(boolean).
-
trySetAccessible
public final boolean trySetAccessible()
SeeAccessibleObject.trySetAccessible().
-
isAccessible
public final boolean isAccessible()
SeeAccessibleObject.isAccessible().
-
getName
public final java.lang.String getName()
- Specified by:
getNamein interfacejava.lang.reflect.Member
-
getModifiers
public final int getModifiers()
- Specified by:
getModifiersin interfacejava.lang.reflect.Member
-
isSynthetic
public final boolean isSynthetic()
- Specified by:
isSyntheticin interfacejava.lang.reflect.Member
-
isPublic
public final boolean isPublic()
Returns true if the element is public.
-
isProtected
public final boolean isProtected()
Returns true if the element is protected.
-
isPackagePrivate
public final boolean isPackagePrivate()
Returns true if the element is package-private.
-
isPrivate
public final boolean isPrivate()
Returns true if the element is private.
-
isStatic
public final boolean isStatic()
Returns true if the element is static.
-
isFinal
public final boolean isFinal()
Returnstrueif this method is final, perModifier.isFinal(getModifiers()).Note that a method may still be effectively "final", or non-overridable when it has no
finalkeyword. For example, it could be private, or it could be declared by a final class. To tell whether a method is overridable, useisOverridable().
-
isAbstract
public final boolean isAbstract()
Returns true if the method is abstract.
-
isNative
public final boolean isNative()
Returns true if the element is native.
-
isSynchronized
public final boolean isSynchronized()
Returns true if the method is synchronized.
-
isVolatile
final boolean isVolatile()
Returns true if the field is volatile.
-
isTransient
final boolean isTransient()
Returns true if the field is transient.
-
equals
public boolean equals(@CheckForNull java.lang.Object obj)- Overrides:
equalsin classjava.lang.Object
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
isOverridable
public abstract boolean isOverridable()
Returnstrueif this is an overridable method. Constructors, private, static or final methods, or methods declared by final classes are not overridable.
-
isVarArgs
public abstract boolean isVarArgs()
Returnstrueif this was declared to take a variable number of arguments.
-
invoke
@CheckForNull public final R invoke(@CheckForNull T receiver, java.lang.Object... args) throws java.lang.reflect.InvocationTargetException, java.lang.IllegalAccessException
Invokes withreceiveras 'this' andargspassed to the underlying method and returns the return value; or calls the underlying constructor withargsand returns the constructed instance.- Throws:
java.lang.IllegalAccessException- if thisConstructorobject 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.
-
getReturnType
public final TypeToken<? extends R> getReturnType()
Returns the return type of thisInvokable.
-
getParameters
public final ImmutableList<Parameter> getParameters()
Returns all declared parameters of thisInvokable. Note that if this is a constructor of a non-static inner class, unlikeConstructor.getParameterTypes(), the hiddenthisparameter of the enclosing class is excluded from the returned parameters.
-
getExceptionTypes
public final ImmutableList<TypeToken<? extends java.lang.Throwable>> getExceptionTypes()
Returns all declared exception types of thisInvokable.
-
returning
public final <R1 extends R> Invokable<T,R1> returning(java.lang.Class<R1> returnType)
Explicitly specifies the return type of thisInvokable. For example:Method factoryMethod = Person.class.getMethod("create"); Invokable<?, Person> factory = Invokable.of(getNameMethod).returning(Person.class);
-
returning
public final <R1 extends R> Invokable<T,R1> returning(TypeToken<R1> returnType)
Explicitly specifies the return type of thisInvokable.
-
getDeclaringClass
public final java.lang.Class<? super T> getDeclaringClass()
- Specified by:
getDeclaringClassin interfacejava.lang.reflect.Member
-
invokeInternal
@CheckForNull abstract java.lang.Object invokeInternal(@CheckForNull java.lang.Object receiver, java.lang.Object[] args) throws java.lang.reflect.InvocationTargetException, java.lang.IllegalAccessException- Throws:
java.lang.reflect.InvocationTargetExceptionjava.lang.IllegalAccessException
-
getGenericParameterTypes
abstract java.lang.reflect.Type[] getGenericParameterTypes()
-
getAnnotatedParameterTypes
abstract java.lang.reflect.AnnotatedType[] getAnnotatedParameterTypes()
-
getGenericExceptionTypes
abstract java.lang.reflect.Type[] getGenericExceptionTypes()
This should never return a type that's not a subtype of Throwable.
-
getParameterAnnotations
abstract java.lang.annotation.Annotation[][] getParameterAnnotations()
-
getGenericReturnType
abstract java.lang.reflect.Type getGenericReturnType()
-
getAnnotatedReturnType
public abstract java.lang.reflect.AnnotatedType getAnnotatedReturnType()
-
-