Maison > Java > javaDidacticiel > Exemples de modèles d'énumération singleton et d'analyse de code source en Java

Exemples de modèles d'énumération singleton et d'analyse de code source en Java

黄舟
Libérer: 2017-08-08 09:57:04
original
1553 Les gens l'ont consulté

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


Classes restaurées après décompilation
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();
}
Copier après la connexion


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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal