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;
 
 
 
Abstract implementation of java.lang.reflect.InvocationHandler that handles java.lang.Object.equals(java.lang.Object), java.lang.Object.hashCode() and java.lang.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 = {};

  

 
   @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(java.lang.Object,java.lang.reflect.Method,java.lang.Object[]) delegates to this method upon any method invocation on the proxy instance, except java.lang.Object.equals(java.lang.Object), java.lang.Object.hashCode() and java.lang.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.

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

  
By default delegates to java.lang.Object.equals(java.lang.Object) so instances are only equal if they are identical. proxy.equals(argument) returns true if:

Subclasses can override this method to provide custom equality.

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

  
By default delegates to java.lang.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 java.lang.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