メソッド/コンストラクターの呼び出し元インスタンスを取得することは可能ですか?
この質問はすでに投稿されていますが、回答は常に呼び出し元インスタンスではなく呼び出し元クラス(スタックトレースを使用)に関するものです。ソリューションが存在する場合、オブジェクトグラフを作成し(共通のスーパータイプで)、デフォルトのコンストラクターで親子ナビゲーションを処理するのが非常に便利です。
public class TestCallStack {
public static class BaseClass {
BaseClass owner;
// //ok, this is the correct way to do it
// public BaseClass(BaseClass owner) {
// this.owner = owner;
// }
public BaseClass() {
//this.owner = ???????;
}
}
public static class Parent extends BaseClass {
Child child = new Child();
}
public static class Child extends BaseClass {
}
public static void main(String[] args) {
Parent parent = new Parent();
System.out.println(parent.child.owner==parent); // must be true
}
}
あなたの直感は正しいです-それは不可能です。個人的には、リファクタリングに関してコードをかなり脆弱にするため、それは良いことだと思います(一部のコードを静的メソッドに引き出すことを想像してください-突然、呼び出し元オブジェクトがまったくなくなります)。
ある種の所有者関係を表現したい場合は、その所有者を明示的に提供する必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加