unlike constructors, the JVM does not enforce chained calling of the finalizers of superclasses. To ensure that a finalize() method always gets called on object finalization, it either has to be declared final (or in a final class), or, preferably, the finalizer code is placed in a so-called 'finalizer guardian': A private instantiation of a subclass of Object with just the finalizer method inside.
Since 0.7
Bad code: |
Good code: |
|
public class TestClass { protected void finalize() { //finalize something } } |
public class TestClass { private final Object finalizerGuardian = new Object() { protected void finalize() { //finalize something } }; } |
|
This code check requires Eclipse to resolve bindings. Enabling this code check increases build time.
The quick fix for this code check replaces the finalizer method with a finalizer guardian.