私は初心者のプログラマーで、この問題を回避する方法を考えています。私が解決しようとしている問題は、java.util.Observer を使用してプログラム内の静的メソッド呼び出しの集計を維持することです。
明らかに、私の元の投稿は人々を混乱させたに違いないので、もっと自由なままにしておきます。
ご覧いただきありがとうございます
私は初心者のプログラマーで、この問題を回避する方法を考えています。私が解決しようとしている問題は、java.util.Observer を使用してプログラム内の静的メソッド呼び出しの集計を維持することです。
明らかに、私の元の投稿は人々を混乱させたに違いないので、もっと自由なままにしておきます。
ご覧いただきありがとうございます
Observer オブジェクトの update メソッドはスタンドアローンで、なんでもできます。
静的メソッドはオブジェクトの状態を変更しません。Observable を拡張するクラスは、Observable を使用して Observer に状態の変更を通知します。何も変更してはならないので、静的メソッド呼び出しhasChanged
orを持つことは私には意味がありません。notifyObservers
オブザーバーのupdate
メソッドは、変更されたオブジェクトへの参照で呼び出され、静的メソッドはクラスのインスタンスに関連付けられていないため、全体のアイデアは意味がありません。
オブジェクトはオブザーバーを次のObservable
ように呼び出します (これは実際のコードではありません)。
notifyObservers(){
for(Observer observer : observers){
observer.update(this, null);
}
}
静的メソッドから notifyObservers を呼び出すことは意味がありません。 this
ここでは意味がありません。
このスキームに適合する必要がある場合は、メソッドを非静的に変更してください。
返信ありがとうございます。役に立ちました。これを解決するには、Observer を拡張するクラスに静的メソッドを追加して、次の 2 つの更新メソッドを持たせました。
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());
うまくいくようです。