com.fasterxml.classmate.util.MethodKey Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of classmate Show documentation
Show all versions of classmate Show documentation
Library for introspecting types with full generic information
including resolving of field and method types.
package com.fasterxml.classmate.util;
import java.io.Serializable;
/**
* Helper class needed when storing methods in maps.
* Immutable.
*/
@SuppressWarnings("serial")
public class MethodKey implements Serializable
{
private static final Class>[] NO_CLASSES = new Class[0];
private final String _name;
private final Class>[] _argumentTypes;
private final int _hashCode;
public MethodKey(String name)
{
_name = name;
_argumentTypes = NO_CLASSES;
_hashCode = name.hashCode();
}
public MethodKey(String name, Class>[] argTypes)
{
_name = name;
_argumentTypes = argTypes;
_hashCode = name.hashCode() + argTypes.length;
}
/*
/**********************************************************************
/* Standard methods
/**********************************************************************
*/
/**
* Equality means name is the same and argument type erasures as well.
*/
@Override public boolean equals(Object o)
{
if (o == this) return true;
if (o == null || o.getClass() != getClass()) return false;
MethodKey other = (MethodKey) o;
Class>[] otherArgs = other._argumentTypes;
int len = _argumentTypes.length;
if (otherArgs.length != len) return false;
for (int i = 0; i < len; ++i) {
if (otherArgs[i] != _argumentTypes[i]) return false;
}
return _name.equals(other._name);
}
@Override public int hashCode() { return _hashCode; }
@Override public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append(_name);
sb.append('(');
for (int i = 0, len = _argumentTypes.length; i < len; ++i) {
if (i > 0) sb.append(',');
sb.append(_argumentTypes[i].getName());
}
sb.append(')');
return sb.toString();
}
}