Угадайте во время выполнения поля, используемые в equals () - PullRequest
0 голосов
/ 16 марта 2011

Можно ли программно угадать во время выполнения, какие поля используется методом equals () объекта, которым я не владею? Особенно когда getters не используются equals () для доступа к полям:

    class OverrideEquals {
        String firstField;
        Integer secondField = 0;

        @Override public boolean equals(Object other) {
           if ( other instanceof OverrideEquals ) {
               return lastField.equals(((OverrideEquals) other).lastField);
           }
           return false;
        }
    }

В этом примере, есть ли способ узнать, что equals () использует firstField, а не lastField (анализ байт-кода, прокси, ...) в тот момент, когда он вызывается?

1 Ответ

0 голосов
/ 16 марта 2011

Декомпиляция байт-кода даст вам этот ответ, но более простой и логичный способ сделать это - попросить владельца кода каким-либо образом аннотировать свой метод equals, например, @ChecksForEqualityOn(...).

* 1004.* Есть ли конкретная причина, по которой вам нужно сделать это во время выполнения?
...