繁体   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