0

オブジェクト自体の内部からオブジェクトを強制終了/削除したいと思います。

私が必要とするのは、このオブジェクトへの参照を null にすることですが、コンテナーにハンドルを渡したくありません。ここに小さなコード例があります:

class Obj {
     void run(){
         if(true)
             kill(); 
     }
}
class A{
    Obj o;
    void main(){
        o.run();
    }
}

実行した後、しo.run()たいo == nullです。これは可能ですか?

4

3 に答える 3

1

必要に応じて、オブジェクト自体からオブジェクトへの参照を null にすることはできません。スコープ内で無効にしたい参照を実際に持っているところから、それを行う方法は次のとおりです。

run()参照が完了すると、null になります。

フィードバックに基づいて編集...

class Obj {
    private boolean killMe = false;
    void run(){
        if(someConditionHere) {
            killMe = true;
        }
    }
    public boolean isKillable() { return killMe; }
}

class A{
    Obj o;
    void main(){
        o.run();
        if(o.isKillable()) {
            o = null;
        }
    }
}
于 2013-04-01T17:47:53.457 に答える
0

オブジェクトは他のオブジェクトが所有する参照を変更できないため、独自のメンバー メソッドからオブジェクト参照を無効にすることはできません。ただし、すべてのメンバー フィールドを null に設定できます。将来の呼び出し元は、オブジェクトにアクセスしようとするたびに、必ず NullPointerException を取得します。考えてみれば、それは自殺よりもましだ。
運が良ければ、アプリケーション全体を強制終了させることもできます!

オブジェクトが他のオブジェクトがすでに作成したすべての参照をnullに設定できる場合、オブジェクトの世界はひどい混乱になります.OOPでは、オブジェクトはそのプロパティ(とにかくプライベートのもの)を「所有」し、それらを外部から変更できるためです。ソースは、カプセル化の概念を完全に破ります。

今では、それが便利な場合があると確信しています (そうでなければ、この質問をすることはなかったでしょう)。
唯一の方法は、オブジェクトとそれへの参照を保持するオブジェクトを共通の戦略に同意させることです。
他のことをしようとする前に呼び出さなければならない isDead メソッドのように。
また、外部オブジェクトから憂鬱なオブジェクトへのアクセスをプロキシする PsychologicalSupport オブジェクトを実装することもできます。あなたのオブジェクトが死にたいとき、彼はそれについて Support オブジェクトに通知するだけでよく、PS オブジェクトはメッセージのプロキシを停止し、あなたのオブジェクトはガベージ コレクションされます。

于 2013-04-17T23:20:43.417 に答える
0

私はこれを行います:

class Obj {
    Obj run(){
        if(someConditionHere) {
            return null;
        }

        return this;
    }
}

class A {
    Obj o;
    void main(){
        o = o.run();
    }
}

したがって、A で o の内部状態をチェックする必要はありません。さらにカプセル化されています。

于 2013-04-17T23:39:32.757 に答える