Maison  >  Article  >  Java  >  Explication détaillée de l'utilisation de la sérialisation et de la méthode readResolve() en Java

Explication détaillée de l'utilisation de la sérialisation et de la méthode readResolve() en Java

黄舟
黄舟original
2017-08-08 10:11:482600parcourir

Cet article présente principalement des informations pertinentes sur les exemples de sérialisation et de méthode readResolve() en Java. Voici des exemples pour vous aider à comprendre cette partie des connaissances. Les amis dans le besoin peuvent se référer à

Explication détaillée de. exemples de sérialisation et de méthode readResolve() en java

Quelle est la fonction de la méthode readResolve ? Cette méthode est liée à la sérialisation des objets (cela explique pourquoi la méthode readResolve est modifiée en privé). Quel est le lien avec la sérialisation des objets ?

Passons maintenant brièvement en revue la sérialisation des objets. De manière générale, si une classe implémente l'interface Serialisable, nous pouvons l'écrire en mémoire et la lire depuis la mémoire pour "l'assembler" en un objet exactement identique à l'original. Cependant, lorsque la sérialisation rencontre un singleton, il y a un problème : l'objet lu et assemblé depuis la mémoire enfreint les règles du singleton. Un singleton ne nécessite qu'un seul objet de classe dans une JVM, mais désormais, grâce à la désérialisation, un nouvel objet est cloné. Comme le montre l'exemple suivant :

Code Java :


public final class MySingleton implements Serializable { 
   private MySingleton() { } 
   private static final MySingleton INSTANCE = new MySingleton(); 
   public static MySingleton getInstance() { return INSTANCE; } 
}

Lorsque l'objet MySingleton (l'objet singleton obtenu via la méthode getInstance) est sérialisé Lorsqu'il est lu dans la mémoire, un nouvel objet MySingleton identique existe. Alors comment maintenir le mode singleton ? Cela nécessite l’utilisation de la méthode readResolve. Comme indiqué ci-dessous :


public final class MySingleton implements Serializable{ 
  private MySingleton() { } 
  private static final MySingleton INSTANCE = new MySingleton(); 
  public static MySingleton getInstance() { return INSTANCE; } 
  private Object readResolve() throws ObjectStreamException { 
    // instead of the object we're on, 
    // return the class variable INSTANCE 
   return INSTANCE; 
  } 
}

De cette façon, lorsque la JVM désérialise et "assemble" un nouvel objet à partir de la mémoire, ce readResolve sera automatiquement appelé. méthode pour renvoyer l'objet que nous avons spécifié, et la règle singleton est garantie.

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!

Déclaration:
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