|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectjava.lang.reflect.AccessibleObject
com.google.common.reflect.Invokable<T,R>
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>
Wrapper around either a Method
or a Constructor
.
Convenience API is provided to make common reflective operation easier to deal with,
such as 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());
Field Summary |
---|
Fields inherited from interface java.lang.reflect.Member |
---|
DECLARED, PUBLIC |
Method Summary | ||
---|---|---|
boolean |
equals(java.lang.Object obj)
|
|
static
|
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 . |
|
|
getAnnotation(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 this Invokable . |
|
int |
getModifiers()
|
|
java.lang.String |
getName()
|
|
TypeToken<T> |
getOwnerType()
Returns the type of T . |
|
ImmutableList<Parameter> |
getParameters()
Returns all declared parameters of this Invokable . |
|
TypeToken<? extends R> |
getReturnType()
Returns the return type of this Invokable . |
|
int |
hashCode()
|
|
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. |
|
boolean |
isAbstract()
Returns true if the method is abstract. |
|
boolean |
isAccessible()
|
|
boolean |
isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation> annotationClass)
|
|
boolean |
isFinal()
Returns true if this method is final, per Modifier.isFinal(getModifiers()) . |
|
boolean |
isNative()
Returns true if the element is native. |
|
abstract boolean |
isOverridable()
Returns true if this is an overridable method. |
|
boolean |
isPackagePrivate()
Returns true if the element is package-private. |
|
boolean |
isPrivate()
Returns true if the element is private. |
|
boolean |
isProtected()
Returns true if the element is protected. |
|
boolean |
isPublic()
Returns true if the element is public. |
|
boolean |
isStatic()
Returns true if the element is static. |
|
boolean |
isSynchronized()
Returns true if the method is synchronized. |
|
boolean |
isSynthetic()
|
|
abstract boolean |
isVarArgs()
Returns true if this was declared to take a variable number of arguments. |
|
|
returning(java.lang.Class<R1> returnType)
Explicitly specifies the return type of this Invokable . |
|
|
returning(TypeToken<R1> returnType)
Explicitly specifies the return type of this Invokable . |
|
void |
setAccessible(boolean flag)
|
|
java.lang.String |
toString()
|
Methods inherited from class java.lang.reflect.AccessibleObject |
---|
setAccessible |
Methods inherited from class java.lang.Object |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
Methods inherited from interface java.lang.reflect.GenericDeclaration |
---|
getTypeParameters |
Method Detail |
---|
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
public TypeToken<T> getOwnerType()
T
.
public final boolean isAnnotationPresent(java.lang.Class<? extends java.lang.annotation.Annotation> annotationClass)
isAnnotationPresent
in interface java.lang.reflect.AnnotatedElement
isAnnotationPresent
in class java.lang.reflect.AccessibleObject
public final <A extends java.lang.annotation.Annotation> A getAnnotation(java.lang.Class<A> annotationClass)
getAnnotation
in interface java.lang.reflect.AnnotatedElement
getAnnotation
in class java.lang.reflect.AccessibleObject
public final java.lang.annotation.Annotation[] getAnnotations()
getAnnotations
in interface java.lang.reflect.AnnotatedElement
getAnnotations
in class java.lang.reflect.AccessibleObject
public final java.lang.annotation.Annotation[] getDeclaredAnnotations()
getDeclaredAnnotations
in interface java.lang.reflect.AnnotatedElement
getDeclaredAnnotations
in class java.lang.reflect.AccessibleObject
public final void setAccessible(boolean flag) throws java.lang.SecurityException
setAccessible
in class java.lang.reflect.AccessibleObject
java.lang.SecurityException
public final boolean isAccessible()
isAccessible
in class java.lang.reflect.AccessibleObject
public final java.lang.String getName()
getName
in interface java.lang.reflect.Member
public final int getModifiers()
getModifiers
in interface java.lang.reflect.Member
public final boolean isSynthetic()
isSynthetic
in interface java.lang.reflect.Member
public final boolean isPublic()
public final boolean isProtected()
public final boolean isPackagePrivate()
public final boolean isPrivate()
public final boolean isStatic()
public final boolean isFinal()
true
if this method is final, per Modifier.isFinal(getModifiers())
.
Note that a method may still be effectively "final", or non-overridable when it has no
final
keyword. For example, it could be private, or it could be declared by a final
class. To tell whether a method is overridable, use isOverridable()
.
public final boolean isAbstract()
public final boolean isNative()
public final boolean isSynchronized()
public boolean equals(@Nullable java.lang.Object obj)
equals
in class java.lang.Object
public int hashCode()
hashCode
in class java.lang.Object
public java.lang.String toString()
toString
in class java.lang.Object
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |