我可以在其方法中将对象(指匿名内部类)设置为“null”吗?

时间:2011-08-05 09:05:08

标签: java anonymous-class

我在private内有一个class A方法,如下所示:

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,它实现了Utils.Timer的抽象方法timerExpired(Object)

现在,当计时器到期并且调用该方法时,我只是设置myTimer = null;。这个赋值只是为了确保没有对该对象的引用,GC可以随时将其删除。

可以吗?是否有任何副作用(除了空检查,我已经注意过了)?

2 个答案:

答案 0 :(得分:1)

如果myTimer实例(或静态)变量,那么你可以,是的 - 但你应该警惕initPlay被调用两次的可能性 - 会导致第一个有资格提前进行垃圾收集(假设其他任何东西都没有对计时器的引用)。

答案 1 :(得分:0)

如果需要访问本地变量myTimer,则应使用final键声明变量myTimer。但是如果你这样做,可以重新分配局部变量myTimer。 事实上,您不需要这样做,GC会自动收集它。