Вопрос по eclipse, java – Есть ли способ перечислить все вызовы equals () определенного класса, используя Eclipse?

8

В настоящий момент я столкнулся со следующей проблемой:

У меня есть определенный класс, в котором метод equals () переопределяется. Однако я не уверен, используется ли он когда-либо (в моем или в одном из моих коллегских проектов). Есть ли способ узнать? Когда я ищу ссылки, ну, это просто дает мне ВСЕ ссылки на Object equals () - Метод (которых довольно много). Там, безусловно, должен быть более простой способ, чем сканировать их все ...

У кого-нибудь есть идея?

Ваш Ответ

5   ответов
1

который бы надежно делал это исключительно посредством статического анализа (я сомневаюсь, что он существует).

Практический метод, которыйmight помочь установить точку останова на первой строкеequals() метод и запустите программу в отладчике Eclipse. Каждый раз, когда вызывается метод, Eclipse будет взламывать отладчик. На этом этапе вы сможете проверить стек вызовов, чтобы увидеть, кто вызвал метод.

Чтобы сделать это эффективно, вы должны иметь некоторое представление о том, какие пути кода могут вызывать метод. Если вы не можете запустить метод, это не доказывает, что никто не использует его.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededevery possible code pathError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

Обозреватель пакетов или представление Outline и нажмите F4. В качестве альтернативы вы можете выбрать метод - & gt; щелкните правой кнопкой мыши - & gt; Открытая иерархия вызовов
Это покажет всем членам, вызывающим этот метод в вашей рабочей области. Надеюсь это поможет

1

log.debug // Whatever you want
return this == obj;

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

5

Чтобы выяснить, вызывается ли определенный переопределенный метод или нетstatically decidableВот почему Eclipse более приближает ответ.

Предположим, у вас есть полеObject o и что вы в какой-то момент делаетеo.equals(...), Чтобы определить, стоит лиo может когда-либо относиться кYourClass объект требует, чтобы вы определили тип времени выполненияo вдоль каждого возможного пути выполнения, который просто не может быть сделан статически.

Причина, по которой это невозможно, весьма схожа с тем, почему компилятор отклоняет следующий код:

Object o = "hello";
System.out.println(o.length());

Лучшее, что вы можете сделать, это, вероятно, отладить вашу программу, либо установив точку останова, либо выдав, например, UnsupportedOperationException из метода equals.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededMyClassError: User Rate Limit Exceededequals()Error: User Rate Limit Exceededequals()Error: User Rate Limit ExceededObjectError: User Rate Limit ExceededObjectError: User Rate Limit ExceededMyClassError: User Rate Limit Exceededequals()Error: User Rate Limit Exceeded
2

в этом отношении java нарушен. Так что вам нужно сделать это трудным путем и надеяться поймать все происшествия.

Create a copy of your class Delete the old class Fix all compiler-errors by renaming one by one. Look for occurrences where the class is used as key for maps Look for collections of the class ( indexOf(), contains() ) Look for calls to equals() or hashCode() of the class Hope you didnt miss something

Похожие вопросы