これについて提案が必要です
class A{
B b;
}
Class B{
P String something();
}
の
class test{
B b = new B();
b.something();
}
something()
誰かが私を(名前で)呼んだ場合、私は彼の名前を知っているはずです。
これについて提案が必要です
class A{
B b;
}
Class B{
P String something();
}
の
class test{
B b = new B();
b.something();
}
something()
誰かが私を(名前で)呼んだ場合、私は彼の名前を知っているはずです。
解決策は、プログラムでスタック トレースを生成することです。
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
}
}
}