Java-匿名内部类生命周期

javacavaj:

在对象生命周期的什么时候使用匿名内部类作为PropertyChangeListener时,将收集类的垃圾?回收包含的类(SettingsNode)之后?是否应该在包含类(SettingsNode)的终结器中显式删除PropertyChangeListener?

public class SettingsNode extends AbstractNode
{
    public SettingsNode(Project project, ProjectSettings projectSettings)
        throws IntrospectionException
    {   
        // use an anonymous inner class to listen for changes
        projectSettings.addPropertyChangeListener(ProjectSettings.PROP_NAME,
            new PropertyChangeListener()
            {
                @Override
                public void propertyChange(PropertyChangeEvent evt)
                {
                   // handle event
                }
            });
     }
}
卡尔·斯莫特里兹:

像所有对象一样,当匿名内部类的最后一个引用不再引用它时,该匿名内部类也有资格进行垃圾回收。我在这里使用狡猾的措辞,因为Java不保证所有事情都会被垃圾回收–唯一的保证就是只要有参考就不会发生。

在这种特殊情况下,那将是projectSettingsa removePropertyListener()或本身被垃圾收集的时候。

因为projectSettings引用了匿名内部类,并且因为内部类引用了它的包含类,所以这意味着包含类也将至少与内部类一样长。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章