Si jePeut-on appeler d'autres méthodes après finalize()?
public class Foo {
private boolean finalized = false;
public void foo() {
if (finalized)
throw new IllegalStateException("finalize() has been called.");
}
@Override public void finalize() {
super.finalize();
finalized = true;
}
}
Est-il garanti, même face à de multiples discussions, en supposant que le GC appellera finalize()
, que le IllegalStateException
ne sera jamais jeté?
Je sais que face à une méthode finalize()
qui empêche l'objet d'être récupérable, l'objet ne sera pas récupéré et d'autres méthodes pourraient être appelées. Mais ce finalize()
ne fait pas cela. Est-il toujours possible que foo()
soit appelé après finalize()
?
Vouliez-vous dire demander, « après Finaliser a été appelé par le GC? Sinon, un idiot pourrait vous l'appeler explicitement. – bmargulies
@bmargulies Merci, c'est ce que je voulais dire. – Owen
vous devriez garder cette méthode protégée comme initialement défini dans Objet non public pour limiter le risque –