“终结者监护人”如何在java中工作?

“终结者监护人”[Effective Java,第30页]如何运作?

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

它解决了子类忘记调用超类的finalize方法的问题。 这种模式通过将一个额外的实例与重写的finalize附加到您的超类来实现。 这样,如果超类超出范围,附加的实例也将超出范围,这将触发其finalize的执行,这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"); } }