[英]Can I set object (referring to anonymous inner class) to “null” inside its method?
我在class A
有一個private
方法,如下所示:
class A
{
//...
private void initPlay(final long duration)
{
myTimer = new Utils.Timer(duration) // non-static member variable
{
@Override
public void timerExpired(Object o)
{
// ... do something
myTimer = null;
initReplay(); // unrelated method
}
};
}
}
myTimer
引用了一個匿名內部class
,該內部class
實現了Utils.Timer
的抽象方法timerExpired(Object)
。
現在,當計時器到期並調用該方法時,我只需將myTimer = null;
設置myTimer = null;
。 進行此分配只是為了確保沒有對該對象的引用,並且只要找到,GC就可以將其刪除。
可以嗎? 是否有任何副作用(除了我已經注意的null檢查之外)?
如果myTimer
是實例 (或靜態)變量,則可以-是的-但是您應該警惕兩次調用initPlay
的可能性-這將導致第一個可以盡早進行垃圾回收(假設沒有其他東西參考計時器)。
如果需要訪問局部變量myTimer,則應使用最終鍵聲明變量myTimer。 但是,如果這樣做,則可以重新分配局部變量myTimer。 實際上,您不需要這樣做,GC會自動收集它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.