gpt4 book ai didi

java - "finalizer guardian"在 Java 中如何工作?

转载 作者:搜寻专家 更新时间:2023-10-30 19:56:55 24 4
gpt4 key购买 nike

“终结器监护人”[Effective Java,第 30 页] 是如何工作的?

你用过吗?它是否解决了任何具体问题?

最佳答案

解决了子类忘记调用父类(super class)的finalize方法的问题。此模式的工作原理是将一个带有覆盖的 finalize 的额外实例附加到您的父类(super class)。这样,如果父类(super class)超出范围,附加实例也会超出范围,这将触发其 finalize 的执行,这将依次调用 finalize 封闭类。

这是一个展示监护人模式的简短片段:

public class Parent {

public static void main(final String[] args) throws Exception {
doIt();
System.gc();
Thread.sleep(5000); // 5 sec sleep
}

@SuppressWarnings("unused")
private final Object guardian = new Object() {
@Override protected void finalize() {
doFinalize();
}
};

private void doFinalize() {
System.out.println("Finalize of class Parent");
}

public static void doIt() {
Child c = new Child();
System.out.println(c);
}

}

class Child extends Parent {

// Note, Child class does not call super.finalize() but the resources held by the
// parent class will still get cleaned up, thanks to the guardian pattern
@Override protected void finalize() {
System.out.println("Finalize of class Child");
}

}

关于java - "finalizer guardian"在 Java 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6872857/

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