簡體   English   中英

我可以在其方法內將對象(指匿名內部類)設置為“ null”嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM