La comparaison des valeurs de champ à l'aide de la réflexion

Je suis en train de comparer les valeurs de champ de deux objets différents de manière générique. J'ai une fonction (voir ci-dessous) qui prend deux Objets, puis il reçoit les champs et les compare ensuite les champs dans une boucle et ajoute les champs de la liste s'ils ne sont pas les mêmes - est-ce la bonne façon de le faire?

public void compareFields(Object qa, Object qa4) throws FieldsNotEqualException
{

  Field[] qaFields = qa.getClass().getFields();
  Field[] qa4Fields = qa4.getClass().getFields();

  for(Field f:qaFields) 
  { 

    for(Field f4:qa4Fields)
    {
       if(f4.equals(f))
       {
           found = true;
           break;
       }
       else
       {
           continue;
       }
    }
  }

 if(!found)
 {
    report.add(/*some_formatted_string*/) //some global list 
    throw new FieldsNotEqualException();
 }
}

J'ai été sur google et j'ai vu que le C# comme un PropertyInfo de la Classe Java ont quelque chose comme ça?
AUSSI, est-il un moyen de faire comme f.getFieldValue() -je sais il n'y a pas de méthode comme ça, mais peut-être il ya une autre façon???

Les champs appartiennent à des classes, les valeurs sont détenues (si ce n'est statique) dans les instances. Qu'est-ce exactement que vous essayez d'accomplir?
Ok, j'aurais dû être plus clair - im passage dans les deux cas de deux objets - im essayant de comparer les deux séries de données (listes d'objets) qui sont retournés par hibernate - mais je suis passer dans une boucle d'une instance de l'objet de peu de classe à un temps de comparer les champs de cette instance à l'encontre de certains autres exemple
Si vous êtes en utilisant Hibernate, cette approche pourrait ne pas fonctionner - Hibernate modifie l'objet contenu au moment de l'exécution, et je ne suis pas sûr que la réflexion va au travail, il pourrait, mais si vous avez l'expérience de quelque chose de drôle, il pourrait être Hibernate interférer avec les propriétés de l'objet.
Je pense qu'à ce point de Hibernate est fait interférer avec ces objets...j'ai l'exécution d'une requête et obtenir ensuite une Liste<Object>() de retour de mise en veille prolongée. Si je voulais le faire dans un non générique de la façon dont je pourrais chacune des instances dans la liste, puis de comparer les valeurs - mais ça fait beaucoup de code qui pourrait être fait d'une manière générique.
Si vous utilisez l'Ide, vous pouvez générer equals() et hashCode() automatiquement. J'ai tendance à aimer ces plus de l'aide de la réflexion pour comparer les données, comme avec la réflexion, vous ne pouvez pas limiter les champs qui seront comparés.

OriginalL'auteur JonH | 2012-11-21