@Beta public abstract class AbstractInvocationHandler extends java.lang.Object implements java.lang.reflect.InvocationHandler
InvocationHandler
that handles Object.equals(java.lang.Object)
, Object.hashCode()
and Object.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());
Modifier and Type | Field and Description |
---|---|
private static java.lang.Object[] |
NO_ARGS |
Constructor and Description |
---|
AbstractInvocationHandler() |
Modifier and Type | Method and Description |
---|---|
boolean |
equals(java.lang.Object obj)
By default delegates to
Object.equals(java.lang.Object) so instances are only equal if they are
identical. |
protected abstract java.lang.Object |
handleInvocation(java.lang.Object proxy,
java.lang.reflect.Method method,
java.lang.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,
except Object.equals(java.lang.Object) , Object.hashCode() and Object.toString() . |
int |
hashCode()
By default delegates to
Object.hashCode() . |
java.lang.Object |
invoke(java.lang.Object proxy,
java.lang.reflect.Method method,
java.lang.Object[] args)
proxy.hashCode() delegates to hashCode()
proxy.toString() delegates to toString()
proxy.equals(argument) returns true if:
proxy and argument are of the same type
and equals(java.lang.Object) returns true for the InvocationHandler of argument
other method calls are dispatched to handleInvocation(java.lang.Object, java.lang.reflect.Method, java.lang.Object[]) . |
private static boolean |
isProxyOfSameInterfaces(java.lang.Object arg,
java.lang.Class<?> proxyClass) |
java.lang.String |
toString()
By default delegates to
Object.toString() . |
public final java.lang.Object invoke(java.lang.Object proxy, java.lang.reflect.Method method, java.lang.Object[] args) throws java.lang.Throwable
proxy.hashCode()
delegates to hashCode()
proxy.toString()
delegates to toString()
proxy.equals(argument)
returns true if:
proxy
and argument
are of the same type
equals(java.lang.Object)
returns true for the InvocationHandler
of argument
handleInvocation(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
.
invoke
in interface java.lang.reflect.InvocationHandler
java.lang.Throwable
protected abstract java.lang.Object handleInvocation(java.lang.Object proxy, java.lang.reflect.Method method, java.lang.Object[] args) throws java.lang.Throwable
invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
delegates to this method upon any method invocation on the proxy instance,
except Object.equals(java.lang.Object)
, Object.hashCode()
and Object.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[])
, args
will never be null. When the method has no parameter,
an empty array is passed in.
java.lang.Throwable
public boolean equals(java.lang.Object obj)
Object.equals(java.lang.Object)
so instances are only equal if they are
identical. proxy.equals(argument)
returns true if:
proxy
and argument
are of the same type
InvocationHandler
of argument
Subclasses can override this method to provide custom equality.
equals
in class java.lang.Object
public int hashCode()
Object.hashCode()
. The dynamic proxies' hashCode()
will
delegate to this method. Subclasses can override this method to provide custom equality.hashCode
in class java.lang.Object
public java.lang.String toString()
Object.toString()
. The dynamic proxies' toString()
will
delegate to this method. Subclasses can override this method to provide custom string
representation for the proxies.toString
in class java.lang.Object
private static boolean isProxyOfSameInterfaces(java.lang.Object arg, java.lang.Class<?> proxyClass)