我是初学者程序员,想知道如何解决这个问题。我要解决的问题是使用 java.util.Observer 在我的程序中记录静态方法调用。
显然,我原来的帖子一定只是让人们感到困惑,所以我将把它留得更开放:任何人都可以建议一种方法来保持静态方法计数在扩展 Observable 的类上吗?
感谢您的关注
我是初学者程序员,想知道如何解决这个问题。我要解决的问题是使用 java.util.Observer 在我的程序中记录静态方法调用。
显然,我原来的帖子一定只是让人们感到困惑,所以我将把它留得更开放:任何人都可以建议一种方法来保持静态方法计数在扩展 Observable 的类上吗?
感谢您的关注
静态方法不会改变对象的状态。扩展 Observable 的类使用 Observable 来通知观察者状态的变化。对我来说,调用静态方法hasChanged
或没有意义notifyObservers
,因为它不应该改变任何东西。Observer 的update
方法通过引用更改的对象来调用,并且静态方法不与类的任何实例相关联,因此整个想法没有意义。
该Observable
对象像这样调用观察者(这不是真正的代码):
notifyObservers(){
for(Observer observer : observers){
observer.update(this, null);
}
}
从静态方法调用 notifyObservers 没有意义。 this
这里没有任何意义。
如果必须适合此方案,请将您的方法更改为非静态方法。
观察者对象的更新方法是独立的,你可以做任何事情。
感谢您的回复。这很有帮助。我通过在扩展 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 调用并传递对调用方法的引用getEnclosingMethod()
。
前任:
MyObserver.update(new Object(){}.getClass().getEnclosingMethod());
似乎工作正常。