2009-08-31 11 views
0

Je cherche une librairie qui, à partir d'un arbre d'objets, effectue un condensé de message ou un hachage sur l'ensemble de la structure.Existe-t-il une bibliothèque Java qui effectue un résumé de message sur un arbre d'objets?

Je veux voir si un objet passé à une méthode est modifié ou non (cet objet contient d'autres objets, qui contiennent des objets et ainsi de suite - aucun n'est immuable).

Existe-t-il un moyen de vérifier si l'état de n'importe quel objet de la structure change pendant l'appel?

Répondre

1

Vous pouvez implémenter hashCode() pour tous les objets de l'arborescence. Si le hashCode de l'objet racine a changé, vous savez que l'état de certains objets dans l'arborescence a changé.

+1

De nombreuses classes doivent être modifiées pour cela. J'ai aussi des cartes qui contiennent des objets (pas toujours les mêmes objets). Je devrai soit voir quels sont tous les objets qui peuvent faire partie de l'arbre et les modifier tous pour ajouter le calcul de code de hachage, ou pour voir ce que le code (de toutes les méthodes qui utilisent l'arbre) fait à l'arbre. Je pourrais aussi utiliser la réflexion pour extraire des données de manière récursive de l'arbre, mais je cherche un moyen plus rapide. Un tel outil existe-t-il? –

0

Le problème avec l'utilisation du hachage pour détecter les changements est qu'il ne fournit pas une réponse absolue "non". Il vous dit simplement que quelque chose probablement n'a pas été changé.

Si vous êtes d'accord avec l'absence de certaines modifications, alors assurez-vous que le hachage est sur l'arbre. Si ce n'est pas le cas, vous devrez envisager d'autres options, mais je devrais en savoir plus sur votre situation avant de pouvoir suggérer quelque chose.

0

Je l'ai fait en utilisant le standard MessageDigest et MD5 fournis avec le JRE.

One link

En ce qui concerne les abordages, quand j'ai 2 objets avec le même MD5, je sais qu'ils sont potentiellement les mêmes, donc je fais une comparaison récursive complète. Pourtant, les collisions sont peu probables et il vaut vraiment la peine d'implémenter cette technique.

Questions connexes