gpt4 book ai didi

java - 使用反射比较字段值

转载 作者:搜寻专家 更新时间:2023-10-31 08:20:27 25 4
gpt4 key购买 nike

我正在尝试以通用方式比较两个不同对象的字段值。我有一个函数(见下文)接受两个对象,然后获取字段,然后在循环中比较字段,如果字段不相同,则将字段添加到列表中——这是执行此操作的正确方法吗?

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();
}
}

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

最佳答案

您可以查看 org.apache.commons.lang.builder.EqualsBuilder,如果您想逐个字段进行比较,这将为您省去很多麻烦。

org.apache.commons.lang.builder.EqualsBuilder.reflectionEquals(Object, Object)

如果您想自己比较字段,请查看 java.lang.Class.getDeclaredFields(),它将为您提供所有字段,包括非公共(public)字段。

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

关于java - 使用反射比较字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13496026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com