gpt4 book ai didi

Java - 匿名内部类生命周期

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:15:48 24 4
gpt4 key购买 nike

当使用匿名内部类作为 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 不保证事情会被 GC——唯一的保证是只要有引用就不会发生。

在这种特殊情况下,当 projectSettings 执行 removePropertyListener() 或本身被垃圾收集时。

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

关于Java - 匿名内部类生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2104538/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com