Tôi có một lớp siêu với các nhà xây dựng lồng ghép với phương thức finalize(). Để bảo vệ chống lại các lớp con quên gọi super.finalize, tôi đã viết một trình bảo vệ finalizer (EJ Item 7) như vậy.Trình bảo vệ Java finalizer dường như không hoạt động?
public class Super {
public Super() {}
{
Object finalizerGuardian = new Object() {
@Override
protected void finalize() {
System.out.println("Finalizer guardian finalize");
Super.this.finalize();
}
};
}
protected void finalize() {
System.out.println("Super finalize");
}
}
Dưới đây là một lớp con mẫu -
public class Sub extends Super {
public Sub() {}
protected void finalize() {
System.out.println("Sub finalize");
}
public static void main(String[] args)
throws InterruptedException {
if (1 == 1) {
Sub s1 = new Sub();
}
Runtime.getRuntime().gc();
Thread.sleep(10000);
}
}
Khi đối tượng s1 đi ra khỏi phạm vi, hoàn thiện finalizer giám hộ() được gọi, và tôi nhận được SYSO từ phương pháp hoàn thiện của lớp con, nhưng không bao giờ có được một từ cuối cùng của siêu.
Tôi đang bối rối. Tôi có hiểu lầm điều gì đó về cơ bản không?
Tuyên bố từ chối: Tôi nhận thấy các trình kết thúc là nguy hiểm và không được khuyến khích, v.v. Vẫn đang cố gắng tìm hiểu vấn đề ở đây.
Quá bắt kịp trong "nó không hoạt động" để xem vấn đề rõ ràng. Cảm ơn!! – Kal