Package com.google.common.reflect
Class AbstractInvocationHandler
- java.lang.Object
-
- com.google.common.reflect.AbstractInvocationHandler
-
- All Implemented Interfaces:
InvocationHandler
@Beta public abstract class AbstractInvocationHandler extends Object implements InvocationHandler
Abstract implementation ofInvocationHandlerthat handlesObject.equals(java.lang.Object),Object.hashCode()andObject.toString(). For example:class Unsupported extends AbstractInvocationHandler { protected Object handleInvocation(Object proxy, Method method, Object[] args) { throw new UnsupportedOperationException(); } } CharSequence unsupported = Reflection.newProxy(CharSequence.class, new Unsupported());- Since:
- 12.0
- Author:
- Ben Yu
-
-
Constructor Summary
Constructors Constructor Description AbstractInvocationHandler()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description booleanequals(Object obj)By default delegates toObject.equals(java.lang.Object)so instances are only equal if they are identical.protected abstract ObjecthandleInvocation(Object proxy, Method method, Object[] args)invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])delegates to this method upon any method invocation on the proxy instance, exceptObject.equals(java.lang.Object),Object.hashCode()andObject.toString().inthashCode()By default delegates toObject.hashCode().Objectinvoke(Object proxy, Method method, Object[] args)Processes a method invocation on a proxy instance and returns the result.StringtoString()By default delegates toObject.toString().
-
-
-
Constructor Detail
-
AbstractInvocationHandler
public AbstractInvocationHandler()
-
-
Method Detail
-
invoke
public final Object invoke(Object proxy, Method method, @NullableDecl Object[] args) throws Throwable
Processes a method invocation on a proxy instance and returns the result. This method will be invoked on an invocation handler when a method is invoked on a proxy instance that it is associated with.proxy.hashCode()delegates tohashCode()proxy.toString()delegates totoString()proxy.equals(argument)returns true if:proxyandargumentare of the same type- and
equals(java.lang.Object)returns true for theInvocationHandlerofargument
- other method calls are dispatched to
handleInvocation(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]).
- Specified by:
invokein interfaceInvocationHandler- Parameters:
proxy- the proxy instance that the method was invoked onmethod- theMethodinstance corresponding to the interface method invoked on the proxy instance. The declaring class of theMethodobject will be the interface that the method was declared in, which may be a superinterface of the proxy interface that the proxy class inherits the method through.args- an array of objects containing the values of the arguments passed in the method invocation on the proxy instance, ornullif interface method takes no arguments. Arguments of primitive types are wrapped in instances of the appropriate primitive wrapper class, such asjava.lang.Integerorjava.lang.Boolean.- Returns:
- the value to return from the method invocation on the
proxy instance. If the declared return type of the interface
method is a primitive type, then the value returned by
this method must be an instance of the corresponding primitive
wrapper class; otherwise, it must be a type assignable to the
declared return type. If the value returned by this method is
nulland the interface method's return type is primitive, then aNullPointerExceptionwill be thrown by the method invocation on the proxy instance. If the value returned by this method is otherwise not compatible with the interface method's declared return type as described above, aClassCastExceptionwill be thrown by the method invocation on the proxy instance. - Throws:
Throwable- the exception to throw from the method invocation on the proxy instance. The exception's type must be assignable either to any of the exception types declared in thethrowsclause of the interface method or to the unchecked exception typesjava.lang.RuntimeExceptionorjava.lang.Error. If a checked exception is thrown by this method that is not assignable to any of the exception types declared in thethrowsclause of the interface method, then anUndeclaredThrowableExceptioncontaining the exception that was thrown by this method will be thrown by the method invocation on the proxy instance.- See Also:
UndeclaredThrowableException
-
handleInvocation
protected abstract Object handleInvocation(Object proxy, Method method, Object[] args) throws Throwable
invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])delegates to this method upon any method invocation on the proxy instance, exceptObject.equals(java.lang.Object),Object.hashCode()andObject.toString(). The result will be returned as the proxied method's return value.Unlike
invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]),argswill never be null. When the method has no parameter, an empty array is passed in.- Throws:
Throwable
-
equals
public boolean equals(Object obj)
By default delegates toObject.equals(java.lang.Object)so instances are only equal if they are identical.proxy.equals(argument)returns true if:proxyandargumentare of the same type- and this method returns true for the
InvocationHandlerofargument
Subclasses can override this method to provide custom equality.
- Overrides:
equalsin classObject- Parameters:
obj- the reference object with which to compare.- Returns:
trueif this object is the same as the obj argument;falseotherwise.- See Also:
Object.hashCode(),HashMap
-
hashCode
public int hashCode()
By default delegates toObject.hashCode(). The dynamic proxies'hashCode()will delegate to this method. Subclasses can override this method to provide custom equality.- Overrides:
hashCodein classObject- Returns:
- a hash code value for this object.
- See Also:
Object.equals(java.lang.Object),System.identityHashCode(java.lang.Object)
-
toString
public String toString()
By default delegates toObject.toString(). The dynamic proxies'toString()will delegate to this method. Subclasses can override this method to provide custom string representation for the proxies.
-
-