私は何かが欠けているかもしれませんが、あなたがそれを言及しているので:
オブジェクト自体をクリーンアップする他の方法があるかどうか疑問に思っています。
と:
私は自己完結型のウィジェットを持っています。これは、必要なことを行った後に自分自身を null にすることができれば、大幅に改善されます。したがって、GC にクリーンアップさせ、ウィジェットのユーザーが手動で null に設定する必要がないようにします。
オブジェクトへの参照をまったく保持しないのはどうですか?
new A().doStuffAndDisappear();
// no reference, instance of A is eligible to GC
アップデート
これは OP が探しているものではないため、@Perce ソリューションを展開させてください。
interface AHolder
{
void setA(A a);
}
class AParent implements AHolder {
private A a;
public AParent() {
a = new A();
}
public void doSomething() {
a.doStuffAndDisappear(this);
if(a == null)
{
System.out.println("It is true!");
}
}
public void setA(A a) {
this.a = a;
}
}
class A
{
void doStuffAndDisappear(AHolder parent) {
parent.setA(null);
}
}
親の型や を保持するフィールドを知る必要はありませんA
。
実施例。
A
すべての親で null を参照したい場合はA
、親のリスト ( List<AParent> parents
) を保持するように変更し、親を追跡するメソッドを実装します。
void addParent(AParent parent)
{
parents.add(parent);
}
さらに、void cleanUp()
null を設定する親を反復処理するもの:
void cleanUp()
{
for (AParent parent : parents)
{
parent.setA(null);
}
parents.clear();
}
このソリューションが JavaBeans Bound Propertiesによく似ていることに注目してください。これは偶然ではありません。ある意味では、単純なイベント/リスナー アーキテクチャを作成してA
、親に参照を取得するように通知することができます。