Учитывает ли Method.hashCode () типы параметров метода? - PullRequest
6 голосов
/ 02 апреля 2011

Javadocs говорят:

Возвращает хэш-код для этого метода.Хеш-код вычисляется как исключительный или из хеш-кодов для объявленного имени класса базового метода и имени метода.

Очевидно, что в этом описании отсутствуют типы типов параметров метода - означает ли эточто два метода в одном классе с одинаковыми именами, но разными параметрами, будут иметь одинаковые значения hashCode()?

Ответы [ 3 ]

1 голос
/ 02 апреля 2011

Вы правы - методы с одинаковым именем и одним и тем же классом объявления имеют, как документировано, один и тот же хэш-код. Что, я согласен, немного нелогично.

Код в Sun's JDK:

public int hashCode() {
    return getDeclaringClass().getName().hashCode() ^ getName().hashCode();
}

Но hashCode() не является признаком равенства. Метод equals(..) учитывает аргументы.

0 голосов
/ 02 апреля 2011

Так бы и казалось. Обратите внимание, что контракт equals / hashCode по-прежнему сохраняется, так как два метода, выгодно отличающиеся от equals (), будут иметь одинаковый hashCode.

0 голосов
/ 02 апреля 2011

Посмотрим

Method[] ms = String.class.getMethods();
for (Method method : ms) {
    System.out.println(method.getName());
    System.out.println(method.hashCode());
}

CompareTo -319450075

CompareTo -319450075

IndexOf 887779372

IndexOf 887779372

IndexOf 887779372

IndexOf 887779372 ...

...