3

私はクラスを持っています:

MessageReceiver.java

メッセージを受信しますが、間接的にメッセージを生成することもできます(その後、このクラスに再配信される可能性があります)。スタックトレースでMessageReceiver.javaを使用して送信されたメッセージを処理したくありません。受信したメッセージがMessageReceiver.javaからのものであるかどうかを効率的に判断する方法はありますか?

次のチェーンが可能です。

MessageReceiver.java -> OtherClass.java -> MessageProducer.java -> MessageReceiver.java
4

3 に答える 3

6

私はこれがあなたが求めているものだと思います:

Class<?> myClass = MessageReceiver.class;
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();

for (StackTraceElement element : stackTrace) {
    if (element.getClassName().equals(myClass.getCanonicalName())) {
        System.out.println("class found in stack trace");
        break;
    }
}
于 2012-07-10T14:06:44.660 に答える
1

元のエミッターを示すカスタムヘッダーをメッセージに追加できます。したがってMessageReceiver、ヘッダー値をに設定して"MessageReceiver"メッセージを送信し、この特定のヘッダー値を持つすべてのメッセージを破棄します。

于 2012-07-10T13:54:46.663 に答える
0

例外からスタックトレースを取得し、クラス名を比較してそれらをループさせることができます。

Exception.getStackTrace()は、getClassNameメソッドを持つStackTraceElementsの配列を返します。

http://docs.oracle.com/javase/6/docs/api/java/lang/Throwable.html#getStackTrace()http://docs.oracle.com/javase/6/docs/api/java/lang _ _ /StackTraceElement.html

私が質問を理解したと仮定して

于 2012-07-10T13:53:36.903 に答える