Java: comment assurer serializable collections

En Java, la Collection d'interfaces ne s'étendent pas Sérialisable pour plusieurs bonnes raisons. En outre, la plupart des communes des implémentations de ces interfaces à implémenter Serializable.

Telle sorte que les objets qui implémentent l'un de la Collection-les interfaces sont sérialisables si l'application elle-même est sérialisable (ce qui est généralement le cas) et si les objets de la collection sont toutes serializable.

Mais comment puis-je m'assurer que ces deux conditions sont remplies? Je ne veux pas courir dans l'exécution, erreur, puisque le compilateur a pu vérifier ces conditions. Je suis en train de réfléchir certains évident interface comme (vitrine de la Liste de l'interface):

public interface SerializableList<T extends Serializable> extends Serializable, List<T> {}

Je me demandais si personne n'est confronté à ce problème et est venu avec cette solution de facilité. Jusqu'à maintenant, je n'ai pas pu trouver une solution ou même une discussion sur ce qui me fait douter sur mon idée.

Vous pouvez faire votre List référence - List<T extends Serializable>, si je comprends bien votre question correctement. Vous n'avez pas besoin de déployer votre propre interface.
Le compilateur ne peut pas vérifier. Chaque classe d'exécution Sérialisable pourrait contenir un non transitoires, non sérialisable champ, ce qui conduirait à une exception d'exécution. Et une ArrayList<Object> peut-être sérialisable si les objets qu'il contient sont sérialisables. Si c'est vraiment important, l'utilisation des tests unitaires.
Votre proposition ne garantit que les objets de la liste sont sérialisables, mais pas la Liste-la mise en œuvre elle-même.
Vous n'avez pas me rattraper. Même un ArrayList<Serializable> ne pouvait pas être sérialisable. ArrayList est Sérialisable. Il ne contient que des instances de Serializable. Mais dès que l'un de ces objets contenus contient un non sérialisable domaine, il n'est pas sérialisable plus. Quel que soit le nombre de génériques limites que vous ajoutez, vous pouvez avoir des erreurs lors de l'exécution. Donc, utiliser des tests.
Oui. Et à l'aide d'un non-sérialisable collection quand vous le voulez serializable est aussi un bug. Repérer les bugs par l'écriture de tests.

OriginalL'auteur MrD | 2013-07-23