Отслеживание вызовов статических методов в классе с использованием java.util.Observer - PullRequest
0 голосов
/ 09 февраля 2010

Я начинающий программист, и мне интересно, как обойти эту проблему. Проблема, которую я пытаюсь решить, - это учет вызовов статических методов в моей программе с использованием java.util.Observer.

Ясно, что в моем первоначальном посте просто запутались люди, поэтому я оставлю его более открытым: кто-нибудь может предложить способ подсчета статического метода для класса, расширяющего Observable?

Спасибо за внимание

Ответы [ 3 ]

1 голос
/ 31 октября 2012

Метод обновления объекта-наблюдателя является автономным, вы можете делать что угодно.

1 голос
/ 10 февраля 2010

Статические методы не меняют состояние объектов. Классы, расширяющие Observable, используют Observable для уведомления наблюдателей об изменениях состояния. Мне не имеет смысла вызывать статический метод hasChanged или notifyObservers, потому что это ничего не должно было изменить. Метод Observer update вызывается со ссылкой на измененный объект, а статический метод не связан ни с одним экземпляром класса, поэтому вся идея не имеет смысла.

Объект Observable вызывает наблюдателя примерно так (на самом деле это не код):

notifyObservers(){
    for(Observer observer : observers){
       observer.update(this, null);
    }
}

Вызов notifyObservers из статического метода не имеет смысла. this здесь не имеет значения.

Измените ваш метод на нестатический, если он должен вписываться в эту схему.

0 голосов
/ 07 марта 2010

Спасибо за ответ. Это было полезно. Я решил эту проблему, добавив статический метод в свой класс, который расширил Observer, чтобы у него было два метода обновления:

public static void update(Method method)
{
    //update count here
}

@Override
public void update(Observable observable, Object obj) {
            //override code to handle observable's call to update

    }

Всякий раз, когда я сталкивался со статическим методом, для которого мне нужно было вести подсчет, я вызывал MyClass.update() и передавал ссылку на вызывающий метод, используя API-интерфейс Reflection getEnclosingMethod().

например:

MyObserver.update(new Object(){}.getClass().getEnclosingMethod());

Кажется, работает нормально.

...