2

重複の可能性:
オブジェクトへのすべての参照

Java で、変数への参照を持つクラス/インスタンス メンバーのリストを取得する方法を探しています。

たとえば、この場合:

public class MyClass {
    public LinkedList list; 
} 

public class MyOtherClass {
    public LinkedList list;
}

public class Program {

   public static void main(...) {
      LinkedList list = new LinkedList();
      MyClass c1 = new MyClass();
      MyOtherClass c2 = new MyOtherClass();

      c1.list = list;
      c2.list = list;
   }
}

プログラムの最後に、LinkedListコードの最初の行で作成されたの 3 つの参照がありProgram.mainます。

  1. Program.main.list
  2. MyClass.list
  3. MyOtherClass.list

最初のものはローカル変数ですが (私には関係ありません)、他のものはインスタンス フィールドです。この場合、必要なのは、2. と 3. のオブジェクトへの参照 (MyClassと) と、 1 行目で作成されたMyOtherClassへの参照を持つフィールド名を取得する何らかの方法です。LinkedList

どうやってやるの?

4

1 に答える 1

2

「純粋な」Java ソリューション: うまくいくかどうかはわかりませんが、オブジェクトをラップしてラッパー経由でのみアクセスする余裕がある場合は、次のことを試してくださいWeakHashMap

public class Wrapper {
    private final Object yourObject;

    private final WeakHashMap<Object, Object> accessors = new WeakHashMap<Object, Object>();

    public Wrapper(Object yourObject) {
        this.yourObject = yourObject;
    }

// add synchronized if you want thread-safety.
    public Object getYourObject(Object accessor) {
        accessors.put(accessor, accessor);
        return yourObject;
    }

// add synchronized if you want thread-safety.
    public Object[] getAccessors() {
        return accessors.keySet().toArray(new Object[accessors.keySet().size()]);
    }
}
于 2013-01-18T17:08:23.433 に答える