@Override public boolean equals(final Object o){
  if (o == this) {
    return true;
  }
  if (o == null || o.getClass() != getClass()) {
    return false;
  }
  final MethodKey other=(MethodKey)o;
  final Class<?>[] otherArgs=other._argumentTypes;
  final int argCount=_argumentTypes.length;
  if (otherArgs.length != argCount) {
    return false;
  }
  for (int i=0; i < argCount; ++i) {
    if (otherArgs[i] != _argumentTypes[i]) {
      return false;
    }
  }
  return _name.equals(other._name);
}

@ Override public boolean equals ( final Object o ) { if ( o == this ) { return true ; } if ( o == null || o . getClass ( ) != getClass ( ) ) { return false ; } final MethodKey other = ( MethodKey ) o ; final Class < ? > [ ] otherArgs = other . _argumentTypes ; final int argCount = _argumentTypes . length ; if ( otherArgs . length != argCount ) { return false ; } for ( int i = 0 ; i < argCount ; ++ i ) { if ( otherArgs [ i ] != _argumentTypes [ i ] ) { return false ; } } return _name . equals ( other . _name ) ; }
equality means name is the same and argument type erasures as well .
