Rendre les classes enfants non sérialisables dans Java
J'ai une classe qui implémente Serializable. Maintenant, je prolonge cette classe et je veux que cette classe étendue à être non Sérialisable. Alors, comment faire?
Par exemple. J'ai
class A implements Serializable.
et j'ai
class B extends A.
Mais je veux de la classe B Non Sérialisable.
source d'informationauteur GuruKulki
Vous devez vous connecter pour publier un commentaire.
Comme d'autres l'ont souligné, il n'est pas possible pour une sous-classe d'une
Serializable
classe non-Serializable
.Si ce que vous voulez est pour la sous-classe des attributs de ne pas être sérialisé, une seule option est de les faire tous transitoire.
Si vous avez besoin de plus que ce que vous ne voulez pas super champs de la classe à être sérialisé), remplacer
writeObject(ObjectOutputStream)
etreadObject(ObjectInputStream)
comme indiqué ici - https://web.archive.org/web/20120626144013/http://java.sun.com/developer/technicalArticles/ALT/serializationVous ne pouvez pas supprimer l'interface, mais vous pouvez empêcher la sérialisation au moment de l'exécution:
C'est en effet pas possible. Votre meilleur pari est de laisser B composite/décorer A.
Il sera toujours Serializable, si vous pouviez faire en sorte que rien dans la classe n'est jamais sérialisé par tout membre
transient
.Pas possible. Principe De Substitution De Liskov et tous.
Répondre à l'un de vos commentaires (et en supposant que vous parlez de JPA ou veille prolongée):
Si vous ne voulez pas B persistantes, ne le marque pas comme
@Entity
. Mais il n'a pas vraiment de sens pour B de prolonger Un si B n'est pas une entité persistante à mon humble avis. Ce serait une mauvaise utilisation de l'héritage.Besoin de implememnt readObject() et writeObject() Méthodes