2

これについて提案が必要です

 class A{
    B b;
 }

 Class B{
    P String  something();
 }

 class test{
    B b = new B();
    b.something();
 }

something()

誰かが私を(名前で)呼んだ場合、私は彼の名前を知っているはずです。

4

3 に答える 3

6

解決策は、プログラムでスタック トレースを生成することです。

private static String getCallerName() {
    StackTraceElement[] stElements = Thread.currentThread().getStackTrace();
    for (int i=1; i<stElements.length; i++) {
        StackTraceElement ste = stElements[i];
        if (!ste.getClassName().equals("B") && ste.getClassName().indexOf("java.lang.Thread")!=0) {
            return ste.getClassName();
            // you could also use ste.getMethodName() or ste.getLineNumber()
        }
    }
    return null;
}

たとえば、次のように使用します。

public void something() {
   System.out.println("called by " + getCallerName());
}
于 2013-03-07T08:24:32.000 に答える
0

誰かがあなたの名前を呼んでも、その人があなたに言ったのでない限り、あなたはそれを知らないでしょう.

ここでも同じです。

クラスAからクラスBにあなたの名前を渡します。

于 2013-03-07T08:23:54.390 に答える
0

問題は少し異常に思えるので、アーキテクチャ上の代替案です。よく合うかどうかはわかりません。

class A {
    class C extends B {
        String something() {
            ... A.this
        }
    }
}
于 2013-03-07T08:32:48.060 に答える