Comparaison entre 2 objets
Bonjour,
je nécessite de l'aide pour comparer 2 objets, je m'explique.
J'ai un premier objet instancier, puis l'utilisateur le modifie.
J'aimerai savoir comment connaître quelles modifications l'utilisateur a apporté et les sauvegarder.
Mon objet est composé d'attributs de type primitif (String, float ...) ainsi que d'objet (Polynome, Unites...)
Actuellement j'arrive à obtenir quelque chose qui fonctionne pour mes objets mais pas pour les types primitifs, mais qui est très lourde à mon sens.
Voilà une partie de mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
|
try {
Field[] ancienAttributsCorps = //objetAvantModification;
Field[] nouveauAttributsCorps = //objetApresModification;
for (int i = 0; i < nouveauAttributsCorps.length; i++){ nouveauAttributsCorps[i].setAccessible(true);
ancienAttributsCorps[i].setAccessible(true);
if (nouveauAttributsCorps[i].get(nouveauCorps).getClass() == Polynome.class) {
Field[] ancienPoly = //ancien attributs du polynome
Field[] nouveauPoly = // nouveau attributs du polynome
for (int j = 0; j < nouveauPoly.length ; j++) {
[j].setAccessible(true);
ancienPoly[j].setAccessible(true);
float ancien = (Float) ancienPoly[j]...;
float nouveau = (Float) nouveauPoly[j]... |
Je vous épargne tout le reste, qui permet d'indiquer à l'utilisateur les modifications...
Je me doute qu'il va falloir utiliser un fichier log regroupant toutes les modifications, mais avant cela j'aimerai savoir quelle amélioration dois je effectuer dans mon code.
Merci,
Rémy.
Pour ceux qui veulent, voila mon code entier :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
|
try {
Field[] ancienAttributsCorps = voie.getCorpsEpreuve()[corps].getClass().getSuperclass().getDeclaredFields();
Field[] ancienAttributsGenerique = voie.getCorpsEpreuve()[corps].getClass().getSuperclass().getSuperclass().getDeclaredFields();
Field[] nouveauAttributsCorps = nouveauCorps.getClass().getSuperclass().getDeclaredFields();
Field[] nouveauAttributsGenerique = nouveauCorps.getClass().getSuperclass().getSuperclass().getDeclaredFields();
for (int i = 0; i < nouveauAttributsCorps.length; i++){
nouveauAttributsCorps[i].setAccessible(true);
ancienAttributsCorps[i].setAccessible(true);
if (nouveauAttributsCorps[i].get(nouveauCorps).getClass() == Polynome.class) {
Field[] ancienPoly = ancienAttributsCorps[i].get(voie.getCorpsEpreuve()[corps]).getClass().getDeclaredFields();
Field[] nouveauPoly = nouveauAttributsCorps[i].get(nouveauCorps).getClass().getDeclaredFields(); for (int j = 0; j < nouveauPoly.length ; j++) { nouveauPoly[j].setAccessible(true);
ancienPoly[j].setAccessible(true);
float ancien = (Float) ancienPoly[j].get(ancienAttributsCorps[i].get(voie.getCorpsEpreuve()[corps]));
float nouveau = (Float) nouveauPoly[j].get(nouveauAttributsCorps[i].get(nouveauCorps));
if(ancien != nouveau) {
System.out.print("\nChangement pour " + ancienPoly[j].getName() + " : " + ancienPoly[j].get(ancienAttributsCorps[i].get(voie.getCorpsEpreuve()[corps])) +" -> "+nouveauPoly[j].get(nouveauAttributsCorps[i].get(nouveauCorps)));
}else {
System.out.print("\nIdentique pour " + ancienPoly[j].getName() + " : " + ancienPoly[j].get(ancienAttributsCorps[i].get(voie.getCorpsEpreuve()[corps])) +" = "+nouveauPoly[j].get(nouveauAttributsCorps[i].get(nouveauCorps)));
nouveauPoly[j].setAccessible(false);
ancienPoly[j].setAccessible(false);
}
} else {
if (nouveauAttributsCorps[i].get(nouveauCorps) != ancienAttributsCorps[i].get(voie.getCorpsEpreuve()[corps]))
{
System.out.print("\nChangement pour " + ancienAttributsCorps[i].getName() + " : " + ancienAttributsCorps[i].get(voie.getCorpsEpreuve()[corps]) +" -> "+ nouveauAttributsCorps[i].get(nouveauCorps));
} else { System.out.print("\nIdentique pour " + ancienAttributsCorps[i].getName() + " : " + ancienAttributsCorps[i].get(voie.getCorpsEpreuve()[corps]) +" -> "+ nouveauAttributsCorps[i].get(nouveauCorps));
}
}
nouveauAttributsCorps[i].setAccessible(false);
ancienAttributsCorps[i].setAccessible(false);
} |