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
   *
   * http://www.apache.org/licenses/LICENSE-2.0
   *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 
 package com.google.common.reflect;
 
 
 
 import  javax.annotation.Nullable;

Abstract implementation of InvocationHandler that handles Object.equals, 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());
 

Author(s):
Ben Yu
Since:
12.0
 
 public abstract class AbstractInvocationHandler implements InvocationHandler {
 
   private static final Object[] NO_ARGS = {};

  

  • proxy.hashCode() delegates to AbstractInvocationHandler.hashCode
  • proxy.toString() delegates to AbstractInvocationHandler.toString
  • proxy.equals(argument) returns true if:
    • proxy and argument are of the same type
    • and AbstractInvocationHandler.equals returns true for the InvocationHandler of argument
  • other method calls are dispatched to handleInvocation.
 
   @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 hashCode();
     }
     if (args.length == 1
         && method.getName().equals("equals")
         && method.getParameterTypes()[0] == Object.class) {
       Object arg = args[0];
       return proxy.getClass().isInstance(arg) && equals(Proxy.getInvocationHandler(arg));
     }
     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;

  
By default delegates to Object.equals so instances are only equal if they are identical. proxy.equals(argument) returns true if:
  • proxy and argument are of the same type
  • and this method returns true for the InvocationHandler of argument

Subclasses can override this method to provide custom equality.

  @Override public boolean equals(Object obj) {
    return super.equals(obj);
  }

  
By default delegates to Object.hashCode. The dynamic proxies' hashCode() will delegate to this method. Subclasses can override this method to provide custom equality.
  @Override public int hashCode() {
    return super.hashCode();
  }

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