2009-12-06 7 views
1

Est-il possible de sérialiser un TreeMap avec un comparateur ??Java Serialization Comparator

J'ai testé et sérialise bien un treemap sans comparateur, quand on ajoute le comparateur, il y a une exception. Si je déclare le comparateur comme transitoire, cela ne fonctionne toujours pas. Cela ne fonctionne que si je rends transitoire toutes les arborescences, mais cela ne permet pas de sérialiser les arbres dans ce cas. Toutes les classes que vous tentez de sérialiser doivent implémenter l'interface java.io.Serializable

+0

Objets de quelle classe essayez-vous de sérialiser? –

+0

Toutes les classes du programme implémentent et importent la sérialisation. Ceci est une classe de zoo – d0pe

+2

S'il vous plaît fournir l'exception. Il semble que votre comparateur ne soit pas sérialisable mais la trace de la pile indique quelle classe est défaillante. – PSpeed

Répondre

8

En outre, chaque variable membre de votre classe doit être Serializable. En fait, toute votre hiérarchie devrait l'être.

+0

ce ** doit être la bonne réponse. http://java.sun.com/j2se/1.4.2/docs/api/java/io/NotSerializableException.html – pstanton

+0

qui pourrait être le problème, j'ai un peu gogolé et je ne sais pas si treemap avec comparateur est serializable – d0pe

+0

TreeMap est sérialisable. Regarde ailleurs. – Bozho

0

Pour plus d'aide, consultez this. D'autres choses à prendre en compte (comme mentionné dans le présent document et ailleurs):

  • versioning
  • formulaires personnalisés série pour les objets
  • quels champs de votre objet doivent être sérialisés et ceux qui sont transitoires
+0

c'était la question de Martin. – pstanton

+0

Je l'ai lu et dans les formulaires, il apparaît treemap comme sérialisable comme il est et comparateur de terrain là-bas, mais après quelques tests, il ne fonctionne pas non plus. Je regardais cette page: http://www.cs.chalmers.se/~catarina/java1.5/jsr-14-public-draft/collections-javadoc/serialized-form.html – d0pe

-1

Vous pourriez trouver que c'est aussi simple que de changer le champ Comparateur à un membre statique plutôt que d'une instance:

public final static Comparator<String> ID_IGN_CASE_COMP 

Vous devrez vous assurer que tous les autres champs sont Serializable mais cela devrait être un début.

+0

It is ' t à cause de cela, le comparateur n'est pas sérialisable, mais même si je le déclare comme transitoire, il jette quand même à cause de TreeMap qui utilise le comparateur. – d0pe

+0

Alors la réponse est sûrement de rendre le comparateur sérialisable. –

0

TreeMap ne fait rien de spécial, ici. Si la seule différence entre un TreeMap qui sérialise et celui qui ne le fait pas est votre comparateur ... alors votre comparateur n'est pas sérialisable.

Comment implémentez-vous le comparateur? Votre déclaration transitoire n'a aucun sens pour la classe TreeMap qui n'a pas de référence transitoire.

Que dit l'exception?

Questions connexes