IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Marquer une classe comme "non serializable"


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 5
    Par défaut Marquer une classe comme "non serializable"
    Bonjour,
    Je rencontre un problème mineur avec la sérialisation. J'ai développé une classe qui étends une classe implémentant l'interface Serializable (en l'occurence JPanel). A ce titre, ma nouvelle classe est automatiquement serialisable.
    Problème : ma classe possède tout un tas de champs qui ne sont pas sérialisable. Je peux bien sur les marquer comme transient, mais la sérialisation de ma classe perd de toute façon tout son sens.
    Question : puis-je explicitement déclarée ma classe comme non-sérialisable ? Et si oui comment ?
    Merci par avance pour vos réponses !

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    vous que vous avez des champs non sérializable, elle ne l'est plus, donc je ne vois pas ce que vous désirez faire de plus, elle ne saura pas être sérialisée, ca déclenchera une exception, exactement la même que si votre classe n'avais pas été sérialisable.

  3. #3
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 5
    Par défaut
    Le point qui me dérange est cette classe est marquée théoriquement comme Serializable alors qu'en pratique elle ne l'est pas. Le contrat n'est pas respecté et d'un point de vue sémantique c'est bancal.
    Notamment, un développeur utilisant mon API sera induit en erreur.
    J'aurais aimé pourvoir marquer explicitement cette classe comme non serialisable (autrement qu'avec un bout de commentaire mettant en garde les futurs développeurs et apparaissant dans la javadoc du type : "et les développeurs : attention ! Cette classe est marquée comme Serializable mais en fait il n'en est rien !).

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    ben le seul moyen, c'est de ne pas hériter de quelque chose de serializable.

    Dans l'absolu on peut dire que votre classe étend JPanel mais ne respecte pas le contrant de JPanel puisque tous les composants graphiques sont supposés serializable

  5. #5
    Membre à l'essai
    Inscrit en
    Octobre 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 5
    Par défaut
    Merci pour la réponse
    C'est ce que je craignais... Le problème est que les champs de ma classe sont des composants graphiques tirées d'une autre API et qui ne sont pas serializable. Et ne pas déclarer ma classe comme étant un JPanel compliquerait à mon avis considérablement ma tâche. Je vais devoir me résigner à rester dans cette situation bancale .
    Merci encore !

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2003
    Messages
    87
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 87
    Par défaut
    Il est toujours possible de marquer les champs transient et de redéfinir les méthodes writeObject et readObject pour sérialiser à la main les membres transient.

    Mais cette solution et surement trop lourde pour résoudre un problème de sémantique.

Discussions similaires

  1. une classe comme paramètre de méthode
    Par *alexandre* dans le forum Langage
    Réponses: 2
    Dernier message: 25/03/2008, 14h38
  2. Réponses: 8
    Dernier message: 20/07/2007, 14h28
  3. Réponses: 3
    Dernier message: 04/04/2007, 13h17
  4. Définir une class comme élement graphique
    Par Janitrix dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 14/11/2005, 22h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo