Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  * Copyright (C) 2012 The Guava Authors
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * See the License for the specific language governing permissions and
 * limitations under the License.
import  javax.annotation.Nullable;

Abstract implementation of InvocationHandler that handles Object.equals, Object.hashCode and Object.toString.

Ben Yu
public abstract class AbstractInvocationHandler implements InvocationHandler {
  private static final Object[] NO_ARGS = {};


Object.equals, Object.hashCode are implemented according to referential equality (the default behavior of Object). Object.toString delegates to toString that can be overridden by subclasses.

  @Override public final Object invoke(Object proxyMethod method, @Nullable Object[] args)
      throws Throwable {
    if (args == null) {
      args = ;
    if (args.length == 0 && method.getName().equals("hashCode")) {
      return System.identityHashCode(proxy);
    if (args.length == 1
        && method.getName().equals("equals")
        && method.getParameterTypes()[0] == Object.class) {
      return proxy == args[0];
    if (args.length == 0 && method.getName().equals("toString")) {
      return toString();
    return handleInvocation(proxymethodargs);

invoke delegates to this method upon any method invocation on the proxy instance, except Object.equals, Object.hashCode and Object.toString. The result will be returned as the proxied method's return value.

Unlike invoke, args will never be null. When the method has no parameter, an empty array is passed in.

  protected abstract Object handleInvocation(Object proxyMethod methodObject[] args)
      throws Throwable;

The dynamic proxies' Object.toString will delegate to this method. Subclasses can override this to provide custom string representation of the proxies.
  @Override public String toString() {
    return super.toString();
New to GrepCode? Check out our FAQ X