Java-匿名内部类生命周期

问题描述

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

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

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

解决方法

在对象生命周期的什么时候使用匿名内部类作为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
                }
            });
     }
}

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”