我怎么知道打电话给我班级的班级名字?我不需要被叫者在其班级提供任何信息

时间:2013-03-07 08:21:09

标签: java

我需要一个关于此的建议

 class A{
    B b;
 }

 Class B{
    P String  something();
 }

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

something()

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

3 个答案:

答案 0 :(得分: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());
}

答案 1 :(得分:0)

如果有人通过名字给你打电话,你就不会知道,除非有人告诉你。

这里也是一样。

将你的名字从A组传递给B组。

答案 2 :(得分:0)

因为这个问题看起来有点特别,是一种架构选择。它是否更适合我不知道。

class A {
    class C extends B {
        String something() {
            ... A.this
        }
    }
}