Bonjour, je ne sais pas si c'est vraiment la bonne section pour poster cela.
Quoiqu'il en soit je n'ai pas trouvé de quelconque lien pour contacter directement l'auteur de ce tutoriel, ni de fonctionnalité sur le site pour réagire à un tutoriel.
Je voulais simplement réagire sur une partie du tutoriel :
En parlant des weak references
D'accord, avant d'utiliser la référence, il faut la passer en hard histoire de pas se faire avoir par le gc.Puisque les objets ainsi référencés peuvent être libérés à tout moment par le garbage collector, nous devons vérifier qu'ils n'ont pas disparus avant de nous en servir. Cela force également le programmeur à obtenir une hard reference vers l'objet pour empêcher le garbage collector de le supprimer alors que nous désirons nous en servir.
Sauf que si on travail avec les threads, et que lors de l'exécution de fireBeerPouredEvent() un autre thread décide de supprimer la référence à notre listener juste entre le test d'existance de la référence et son utilisation (et que la destruction se fait bien réellement juste à ce moment la) , on se fait avoir.
J'aurais plutôt pensé qu'il faille d'abord prendre la hard reference de notre listener et d'ensuite tester son existance.
Je ne connais pas trop les weak references, alors je ne sais pas trop ce qui se passe si on essaye de faire un "this.listener.get()" lorsque this.listener == null.
Je déduis du reste du code donné en exemple dans le tutoriel que si cela arrive on aurat une NullPointerException, alors autant l'utiliser !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 BeerListener listener = null; try { listener = this.listener.get(); } catch (NullPointerException ex) { // Plus de référence disponible return; } // Suite du traitement, on peut faire l'assertion que listener != null
Voila, sinon je n'ai pas tilté sur autre chose.
Merci à Romain pour ce tutoriel qui est, comme dit dans un autre sujet, court et instructif .
Partager