使用反射比较字段值

Jon*_*onH 5 java reflection field

我试图以通用方式比较两个不同对象的字段值.我有一个函数(如下所示),它接收两个对象,然后获取字段,然后比较循环中的字段,如果它们不相同,则将字段添加到列表中 - 这是正确的方法吗?

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();
 }
}
Run Code Online (Sandbox Code Playgroud)

我在谷歌搜索,我看到C#有一个PropertyInfo类 - Java有这样的东西吗?还有,有办法做f.getFieldValue()- 我知道没有这样的方法,但也许有另一种方式???

tjg*_*184 10

您可以查看org.apache.commons.lang.builder.EqualsBuilder,如果您想进行现场比较,可以为您节省很多麻烦.

org.apache.commons.lang.builder.EqualsBuilder.reflectionEquals(Object, Object)
Run Code Online (Sandbox Code Playgroud)

如果您想自己比较字段,请查看java.lang.Class.getDeclaredFields()哪些字段将包含非公共字段.

要比较字段的值,请使用" f.get(qa).equals(f.get(qa4)) 当前",实际上是在比较字段实例而不是值.