我需要对此提出建议
class A{
B b;
}
Class B{
P String something();
}
在
class test{
B b = new B();
b.something();
}
something()
必须返回 cal-lee 类的名称,就像有人打电话给我(按名字)我应该知道他的名字。
我需要对此提出建议
class A{
B b;
}
Class B{
P String something();
}
在
class test{
B b = new B();
b.something();
}
something()
必须返回 cal-lee 类的名称,就像有人打电话给我(按名字)我应该知道他的名字。
一种解决方案是以编程方式生成堆栈跟踪:
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());
}
如果有人直呼你的名字,你不会知道,除非有人已经告诉过你。
这里也一样。
把你的名字从 A 级传到 B 级。
由于这个问题似乎有点不同寻常,一个架构替代方案。我不知道它是否更适合我。
class A {
class C extends B {
String something() {
... A.this
}
}
}