Java-匿名内部类生命周期

在对象生命周期的什么时候使用匿名内部类作为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引用了匿名内部类,并且因为内部类引用了它的包含类,所以这意味着包含类也将至少与内部类一样长。

以上是 Java-匿名内部类生命周期 的全部内容, 来源链接: utcz.com/qa/429167.html

回到顶部