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)) 当前",实际上是在比较字段实例而不是值.