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.