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