2

我需要对此提出建议

 class A{
    B b;
 }

 Class B{
    P String  something();
 }

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

something()

必须返回 cal-lee 类的名称,就像有人打电话给我(按名字)我应该知道他的名字。

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 回答