gpt4 book ai didi

java - 仅基于公共(public)属性动态比较两个不同类的对象

转载 作者:太空宇宙 更新时间:2023-11-04 09:49:12 24 4
gpt4 key购买 nike

我正在编写一些完全动态的方法,在这些方法中我需要比较不同类的两个对象。

这是对象的示例:

public class Object1 {

private String lastname;
private String firstname;
private int age;
private int gender;

//All getters and setters
}

public class Object2 {

private String lastname;
private String address;
private String job;

//All getters and setters

}

正如您在此处看到的,唯一的共同属性是姓氏,因此我希望我的比较仅适用于姓氏

此外:

  • 在我的真实代码中,我使用了很多不同的类,我无法让它们实现通用接口(interface),事实上,我根本无法修改它们
  • 我不知道哪些可能是公共(public)属性,所以我无法对我的测试进行硬编码
  • 我使用的是 Java 8

所以我正在寻找一些类,类似于 BeanUtils,它有一个用于公共(public)属性的 copyProperties 方法,但在这里,我不想复制,而是想进行比较。

我认为这种实用程序类可能存在,但我找不到。

所以,如果您有想法,我很乐意阅读:)

谢谢!

[编辑 1] 有关我为什么要这样做的更多信息:

我正在编写一个通用系统来为基于 JAX-RS( Jersey )的 REST Api 生成端点。我正在使用具有泛型类型的接口(interface),例如这个“简单”示例:

public interface sampleEndpoint<BEANPARAM,BODYREQUEST,RESPONSE>  {

@PUT
@Path("/{id}")
default RESPONSE update(@Valid @BeanParam BEANPARAM bp, @Valid BODYREQUEST body) {
//Check if id in path is the same as id in the body

....
}


}

(使用 Jersey,我们无法使用 BeanParam 在相同的 Bean PathParam、QueryParam 和 RequestBody 中进行检索...这就是为什么我需要同时使用 BeanParam 和另一个用于主体的 bean)

我的用例可能更复杂,但这只是一个简单的说明。

最佳答案

据我所知,Reflection API 似乎是这样的。正是您正在寻找的。您可以获得所有Fields的列表在每个类中,然后仅在两个字段具有相同名称时比较它们的值。

这种方法的主要好处是它可以推广到任意两个类。然而,反射经常被人反对,因为它破坏了封装,我建议您在解决这个问题之前,针对您的问题寻找一种更好的解决方案。

关于java - 仅基于公共(public)属性动态比较两个不同类的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55014426/

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