OVH Cloud OVH Cloud

eclipse et serialisable class

7 réponses
Avatar
yvon.thoravalNO-SPAM
Bonjour,

je viens tout juste de passer à eclipse...
j'ai fait un import de mes fichiers projet et j'ai un warning d' eclipse
:

the serialisable class DBManagerDesktopAdmin does not declare a static
final serialVersionUID field of type long.

c'est à :
public class DBManagerDesktopAdmin extends JFrame implements
ActionListener {

ça compile et run impec, je sais "très vaguement" ce que sont les
sérialisables, à quoi me servirai ce "serialVersionUID" ?

--
yt

7 réponses

Avatar
Thomas Cornet
Je viens d'avoir ce genre de warning la semaine dernière.... Pour
désactiver c'est simple :

- menu 'Window'
- item 'Preferences'
- section 'Compiler'
- onglet 'style'
la dernière check-box en bas qui a comme libellé 'Serializable class
without serialVersionUID' a pour value par défaut 'Warning'. Il suffit de
sélectionner 'Ignore', et les warnings disparaitront.

Pour ce qui est de la serialization, une classe qui implémente l'interface
Serializable indique que son contenu peut être transféré dans un flux de
données, typiquement pour sauver une instance de classe dans un fichier par
exemple, ou pour la passer par une socket.

Quand au 'serialVersionUID', je suppose qu'il permet de distinguer quelle
version de la classe a été utilisée, par exemple pour éviter de
désérializer un flux de données dans une classe plus récente, qui a par
exemple un champ en plus ou en moins. Enfin bon, ce sont juste des
suppositions, la première fois que j'en ai entendu parler est quand Eclipse
a mis ses warnings.

Thomas



Bonjour,

je viens tout juste de passer à eclipse...
j'ai fait un import de mes fichiers projet et j'ai un warning d' eclipse
:

the serialisable class DBManagerDesktopAdmin does not declare a static
final serialVersionUID field of type long.

c'est à :
public class DBManagerDesktopAdmin extends JFrame implements
ActionListener {

ça compile et run impec, je sais "très vaguement" ce que sont les
sérialisables, à quoi me servirai ce "serialVersionUID" ?


Avatar
yvon.thoravalNO-SPAM
Thomas Cornet wrote:

Enfin bon, ce sont juste des
suppositions, la première fois que j'en ai entendu parler est quand Eclipse
a mis ses warnings.


Ah d'accord, merci pour les infos...

Je me suis fait très peur en passant de command line à Eclipse, pour
compiler, eclipse me donnait tout un tas d'erreurs (dont le warning +
haut) du genre : vous devriez implémenté une interface etc...

En fait j'avais oublié de transférer ceratins fichiers ...

Au fait, sais-tu comment ne pas faire apparaître une arborescence dans
un projet ?

J'ai toute une arborescence d'images et d'html qui polluent le java...

La présentation en package est un peu fastidieuse je trouve :

plutôt qu'avoir :

yt.tools
yt.tools.dbmstable

j'aurai préféré le système de folder :

yt.tools

qui s'ouvrent :

yt.yools
dbmstable


bon, mais ca marche super bien swt aussi sur macos maintenant, avec une
petite bidouille à faire...

ça m'a permis de nettoyer mes import (ations) frauduleuses...

--
yt

Avatar
Olivier Thomann
ça compile et run impec, je sais "très vaguement" ce que sont les
sérialisables, à quoi me servirai ce "serialVersionUID" ?
Ça n'empèche pas de tourner correctement. L'idée de ce warning est que

ta classe est "serialisable".
Or si tu ne définis pas de champ serialVersionUID et que tu sérialises
les instances de cette classe, tu vas utiliser la sérialisation par
défaut. Ceci veut dire que si ta classe utilise des classes locales ou
des "class literaux", tu risques d'être dépendant du compilateur utilisé
pour compiler ta classe. La sérialisation est en effet trèes mal
spécifiée en Java. Elle utilise les méthodes définies dans la classe
pour calculer un serialVersionUID si aucun n'est explicitement spécifié.
Malheureusement si ta classe définie des classes locales ou autre cas
dans lesquels le compilateur peut rajouter des méthodes dites
synthétiques, le calcul de cette valeur sera modifié.
Je te conseille donc fortement de définir ce champ serialVersionUID.
Pour te simplifier la tâche, tu as simplement besoin de cliquer avec le
bouton droit de la souris sur le warning dans la barre verticale et tu
auras un "quickfix" qui te proposera d'ajouter le field pour toi avec la
bonne valeur.
Pratique, non?
Donc bon conseil, définis ce champ :-).
--
Olivier

Avatar
yvon.thoravalNO-SPAM
Olivier Thomann wrote:

Donc bon conseil, définis ce champ :-).


Merci pour tous ces conseils et explixations, je pense effectivement
qu'eclipse va me faire faire des progres en java, cet IDE est vraiment
très bien fichu...
--
yt

Avatar
yvon.thoravalNO-SPAM
Olivier Thomann wrote:

Pour te simplifier la tâche, tu as simplement besoin de cliquer avec le
bouton droit de la souris sur le warning dans la barre verticale et tu
auras un "quickfix" qui te proposera d'ajouter le field pour toi avec la
bonne valeur.
Oui, ben là je suis embarrassé car j'ai deux options default value () au

generated (), que me conseilles-tu ? A quoi correspond le generated, a
qqc en fonction de la date par exemple ?
Pratique, non?
Oui, effectivement très très pratique, après mon importation j'ai

beaucoup utilisé Source > Format et surtout Sorce > Organize Import, un
sacré coup de balai dans mes import faits à coup de cut'n paste )))


--
yt

Avatar
Olivier Thomann
Oui, ben là je suis embarrassé car j'ai deux options default value () au
generated (), que me conseilles-tu ? A quoi correspond le generated, a
qqc en fonction de la date par exemple ?
Utilise le generated. Cela correspond à la valeur du champ généré par

l'outil serialver du SDK.

Oui, effectivement très très pratique, après mon importation j'ai
beaucoup utilisé Source > Format et surtout Sorce > Organize Import, un
sacré coup de balai dans mes import faits à coup de cut'n paste )))
Ceci ne sont que quelques possibiités d'Eclipse. Utilise le refactoring

et tu verras qu'il peut être très très puissant :-).
--
Olivier

Avatar
yvon.thoravalNO-SPAM
Olivier Thomann wrote:

Utilise le generated. Cela correspond à la valeur du champ généré par
l'outil serialver du SDK.


C'est ce que j'ai pensé, mais là, eclipse freeze...
Ceci ne sont que quelques possibiités d'Eclipse. Utilise le refactoring
et tu verras qu'il peut être très très puissant :-).
Y-a-t'il un "hypertext" search'n replace c'est-à-dire un outil

permettant de changer une chaine de caractères sur un ensemble de
fichiers ?
--
yt