他のクラスをインスタンス化して使用するクラスがあるとします。 2番目のクラスから、最初のクラスへのアクセスが可能ですか?たとえば :Javaでは、そのクラスが作成/使用しているオブジェクトの内部からオブジェクトにアクセスする方法はありますか?
private String getCallerClassName() {
StackTraceElement[] stElements = Thread.currentThread().getStackTrace();
for (int i = 1; i < stElements.length; i++) {
StackTraceElement ste = stElements[i];
if (!ste.getClassName().equals(B.class.getName()) && ste.getClassName().indexOf("java.lang.Thread") != 0)
return ste.getClassName();
}
return null;
}
私は別の質問から得た:How to get the caller class in Java
public class A {
public B obj = new B();
public void something() {
b.somethingElse();
}
}
public class B {
public void somethingElse() {
A owner = getCallingObject();
//the object of class A that called b.somethingElse() is now stored in owner
}
public Object getCallingObject() {
// ?????
// returns the A that instantiated/owns this B
}
}
私はこのようなものを使用して、そのオブジェクトのクラスを取得する方法を知っています。 呼び出し元オブジェクトへのポインタを取得する方法はありますか?
申し訳ありませんが、Javaはそのように動作しません。 'B'に' A'を逆参照したい場合は、自分で作成する必要があります。 –
'b.somethingElse(this);' –
メソッドシグネチャを変更したり、 'A'を' B'に渡すことができない場合は、 'bを呼び出す前にThreadLocalに' A'を入れることができるThreadLocalを使用できます。 somethingElse(); 'を呼び出し、' somethingElse'メソッドの中のThreadLocalから取得します。 AOPを使用してこれをさらに自動化することができます。 – tsolakp