2

このようなメソッドがあるとします

Calculator calc;
public void testMethod(){
-----
----
Calc.add(1,2);
-----
-------
}

ここで、関数の最後に Calculator.add を出力します。つまり、関数の最後に classname.printname を出力します。印刷は、他の方法にも同じものを使用できるように十分に一般的である必要があります。この目標を達成する方法。

前もって感謝します

4

3 に答える 3

2
private static final int CLIENT_CODE_STACK_INDEX;

static {
    // Finds out the index of "this code" in the returned stack trace - funny but it differs in JDK 1.5 and 1.6
    int i = 0;
    for (StackTraceElement ste : Thread.currentThread().getStackTrace()) {
        i++;
        if (ste.getClassName().equals(Resource.class.getName())) {
            break;
        }
    }
    CLIENT_CODE_STACK_INDEX = i;
}

public static String getCurrentMethodName() {
    return Thread.currentThread().getStackTrace()[CLIENT_CODE_STACK_INDEX].getMethodName();
}
public static String getCallerMethodName() {
    return Thread.currentThread().getStackTrace()[CLIENT_CODE_STACK_INDEX+1].getMethodName();
}
于 2012-10-11T08:51:41.273 に答える
2

最も単純なアプローチとして、いつでも呼び出すことができることを覚えておいてくださいthis.getClass().getName():

class SimpleCalculator {

    public int add(int a, int b) {
        System.out.println(this.getClass().getName() +
                " - adding " + a + " and " + b);
        return a + b;
    }
}

もう 1 つの一般的なアプローチは、Log4Jなどのロギング ライブラリを使用することです。

使用するクラスはLoggerです

特定のファイルに書き込むようにLog4Jを構成します。

各クラスは、メッセージをファイルに出力するLogger オブジェクトを宣言します。

各メッセージは、メッセージを生成したクラスの名前で始まります。

class SimpleCalculator {

    Logger calcLogger = Logger.getLogger(SimpleCalculator.class);

    public int add(int a, int b) {
        calcLogger.debug("add - adding " + a + " and " + b);
        return a + b;
    }
}

... または、@urir が提案するような方法を使用することもできます。

...または、夢中になってAOPを使用することもできます。

于 2012-10-11T08:52:53.937 に答える
0

user Calculator.getClass().getName()); クラスの名前と Calculator.getMethod() を検索します。

または System.out.println( "私は " + e.getStackTrace()[1].getClassName() + "." + e.getStackTrace()[1].getMethodName() + "()!" によって呼び出されました。 );

于 2012-10-11T08:59:54.833 に答える