gpt4 book ai didi

Java - 检查部分对象相等性

转载 作者:行者123 更新时间:2023-12-02 09:17:43 24 4
gpt4 key购买 nike

我有一个根据对象的多个属性过滤一组对象的用例。我在 Javascript 中使用的一种方法可能是创建一个仅包含我关心的属性的对象,然后根据我希望过滤的对象检查这些属性名称。

示例( typescript ):

example(): void {
let template = {
name: 'Test',
color: 'Blue'
};

let objects = [
{ name: 'Test', color: 'Blue' },
{ name: 'Test2', color: 'Blue' },
{ name: 'Test', color: 'Red' },
{ name: 'Test', color: 'Blue', extra: true },
];

let results = objects.map(o => this.compare(o, template));
console.log(results);
}

compare(obj, template): boolean {
for (const prop in template) {
if (obj[prop] !== template[prop]) {
return false;
}
}

return true;
}

上面的代码会将[true, false, false, true]写入控制台。这很酷的原因是它基本上可以接受任何对象并发出正确的结果。对于我来说,如何在 Java 中提供此功能并不明显,这样我就可以避免在数百个数据模型 bean 上实现比较功能。

是否有内置或常用的方法可以在 Java 中以通用方式进行等效比较?

最佳答案

这可以使用 reflection 来完成:

public static boolean compare(Object object, Object template) {
Field[] templateFields = template.getClass().getDeclaredFields();
try {
for (Field templateField : templateFields) {
Field objectField = object.getClass().getDeclaredField(templateField.getName());
templateField.setAccessible(true);
objectField.setAccessible(true);
if (!objectField.get(object).equals(templateField.get(template))) {
return false;
}
}
} catch (Exception e) {
return false;
}
return true;
}

(此代码仅显示想法,并未涵盖所有可能的情况,例如不检查继承的字段)

我不知道执行此操作的内置或常用方法。有utilities for strict comparison (通常用于单元测试),不确定它们是否适合您的用例。

请注意Java 9 modules可以限制对对象的反射访问。

关于Java - 检查部分对象相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58881545/

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