Bien que l'interface Serializable en Java n'a pas de méthodes, pas de champs, elle peut remplir sa fonction. Comment?
Bien que le java.io.L'interface Serializable public interface Serializable{}
étonnamment ne contiennent pas de méthodes et de champs en Java, la classe qui implémente cette interface est capable de réaliser la fonction de sérialisation et de désérialisation (l'état de l'objet sérialisé ou désérialisé). Comment peut-il réaliser la fonction de sérialisation et de désérialisation sans aucune des méthodes ou des domaines en Java?
source d'informationauteur Bhavesh
Vous devez vous connecter pour publier un commentaire.
Certaines interfaces ne servent que de "marqueurs" ou "drapeaux".
L'UID et personnalisé lecteurs/écrivains sont accessibles à partir de la réflexion.
Serializable
est un marqueur, et le JRE/JVM peut prendre action(s) en fonction de sa présence.http://en.wikipedia.org/wiki/Marker_interface_pattern
Sérialisable ne contiennent pas de méthode, c'est la
ObjectOutputStream
etObjectInputStream
les classes qui peuvent faire ce travail, par le biais de lawriteObject
etreadObject
méthodes.Serializable
est juste un marqueur de l'interface, en d'autres termes, il met juste un drapeau, sans nécessiter de champs ou de méthodes.L'interface Serializable est un marqueur de l'interface qui informe uniquement JVM qu'un certain objet est sérialisé. Le processus de sérialisation qui se passe en interne.
Une meilleure conception aurait été
Le problème est, il n'existe aucun moyen de fournir des implémentations par défaut; ainsi, chaque sous-classe doit implémenter ces deux méthodes, ce qui est une nuisance.
Dans Java 8, cela va changer, nous pouvons avoir par défaut impls pour les méthodes d'interface
(
Serializable
ne sera pas modifié, mais la nouvelle fonctionnalité peut être utilisée dans des cas comparables)Je suis d'accord avec irreputableexpecially l'affirmation implicite que chaque objet doit savoir comment sérialiser/désérialiser lui-même, à l'exception de son affirmation selon laquelle:
Sûr qu'il y est: Composition D'Objet.
Si vous voyez la mise en œuvre de writeObject méthode de ObjectOutputStream, extrait de code suivant vous permettra de voir à l'intérieur de la mise en œuvre.