Maison >Java >javaDidacticiel >Exemples de modèles d'énumération singleton et d'analyse de code source en Java
Cet article présente principalement des informations pertinentes sur le mode singleton d'énumération JAVA et les exemples d'analyse du code source. Les amis qui en ont besoin peuvent se référer à
Mode singleton d'énumération JAVA et analyse du code source. 🎜>
Il existe de nombreuses façons de mettre en œuvre le mode singleton. Il a également été analysé en ligne qu'il est préférable d'utiliser l'énumération pour mettre en œuvre le mode à intérêt unique. Les avantages ne sont que trois points :1. Sécurité des threads
2. Aucune nouvelle instance ne sera générée en raison de la sérialisation
3. Empêcher les attaques par réflexion Mais il ne semble y avoir aucun article expliquant comment le singleton ENUM réussit. les trois points ci-dessus. Veuillez l'expliquer aux experts. Regardons ces trois points :
Concernant le premier point de sécurité des threads, il ressort du code source de la classe décompilé qu'il l'est également. garanti via le mécanisme de chargement de classe. Cela devrait être le cas (résolu)
À propos du deuxième problème de sérialisation, il y a un article disant que la classe d'énumération implémente elle-même la méthode readResolve(), elle est donc résistante à la sérialisation. . Cette méthode est implémentée par la classe actuelle elle-même (solution)
À propos du deuxième point Attaque par réflexion en trois points J'ai moi-même essayé l'attaque par réflexion suivante, mais une erreur a été signalée... Après avoir lu la classe décompilée. code source ci-dessous, je comprends que parce que la modification de la classe singleton est abstraite, elle ne peut pas être instanciée. (Solution)
Ce qui suit est un singleton d'énumération que j'ai écrit et la classe décompilée de son fichier de classe
Singleton d'énumération
public enum Singleton { INSTANCE { @Override protected void read() { System.out.println("read"); } @Override protected void write() { System.out.println("write"); } }; protected abstract void read(); protected abstract void write(); }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!