0

スタック フレーム経由でメソッド パラメータにアクセスすることは可能ですか?

私が取り組んできたプロジェクトのために、この必要性に出会いました。例外が発生した場合は、ログを記録したいと思います。可能であれば、「上位レベル」に到達するまで、メソッドの名前とパラメーターを再帰的にログに記録したいと考えています。

以下に小さな例を示します。

class Parent{

    public int parentMethod(int param1) {
        String param2;
        Child child = new Child();
        (...)some Work(...)
        int ret = child.childMethod(param1, param2);
        (...)some More Work(...)
        return ret;
    }
}


class Child{
    public int childMethod(int param1, String param2) {
        (...) do more stuff (...)
        try {
            (...) this might generate an exception(...)
        }catch(Exception e) {
            (...) log method name and parameters value(...)
        }
    }
}

この場合、次のようなログを記録したいと思います: -childMethod: param1 value, param2 value- -parentMethod: param1 value-

4

1 に答える 1

2

根本的な問題を抱えていると思います。プリミティブ以外の場合は、パラメーター参照が渡されます。そのため、メソッドは渡されるパラメータ値を変更できます。スタックを単純にトラバーサルするだけでは、この問題は解決しません。

上記の例では、プリミティブと不変オブジェクトを使用していることに注意してください。ただし、より一般的なソリューションが必要だと思います。おそらく、何らかの AOP ソリューションが機能する可能性がありますが、メソッドを呼び出すときに (オブジェクトを記録するために) オブジェクトをコピーする必要があり、悲しみの世界が予想されます。

于 2012-10-26T16:04:59.037 に答える