2016-07-07 1 views
0

カーオブジェクトがGCによって破壊された場合、以下のコードを確認するのを手伝ってください。一般的な慣習に従って、プログラムロジックを回復したいのですが、私のコードは正しいですか?オブジェクトが破壊されたときにWeakReferenceを使用する一般的な方法は何ですか?

Car car = new Car(); 
WeakReference<Car> mWeakReference = new WeakReference<Car>(car); 
mWeakReference.get().run(); 
... 
if (mWeakReference.get() == null) { 
    Car newCar = new Car(); 
    mWeakReference= new WeakReference<Car>(newCar); 
} 
mWeakReference.get().run(); 
+1

* "コード" は何ですか*がすることになって? *「回復プログラムロジック」とは何ですか?あなたは何を達成しようとしていますか? – specializt

+0

'' 'Car'''オブジェクトが存在する必要がある場合は、なぜ' '' WeakReference'''を使うのですか? –

+0

GCがオブジェクトを破棄しないようにするには、WeakReferenceを使用しないでください。代わりに、実際のオブジェクトを使用してください – Zava

答えて

2

あなたが何を求めているのかは明らかではありません(specializtが述べたように)。しかし、コードにバグがあります。以下のコメントを参照してください。

if (mWeakReference.get() == null) { 
    Car newCar = new Car(); 
    mWeakReference= new WeakReference<Car>(newCar); //instance set on weakref 
} // maybe GC runs here 
mWeakReference.get().run(); //instance could be null 

より正確なアプローチが(ただし、あまりにもきれいではない)だろう

Car car = mWeakReference.get(); 
if (car == null) { 
    car = new Car(); 
    mWeakReference= new WeakReference<Car>(car); 
} 
car.run(); 
+0

ねえ、私はちょうど私のコードが間違っていることに気づいた!それは弱い参照を再使用しないので!私はそれを更新しました。 – Augusto

0

いいえ、この弱点は再び破壊された可能性があります。代わりに、再利用: 車の車;参照して実行すると、あなたはハードリファレンスがあり、GCすることはできません。

関連する問題