java比较对象:使用反射?

cod*_*ler 2 java reflection compare object

我有一个对象本身有多个对象作为字段.我的问题是,我有两个这类对象,我想比较这两个.我知道我可以做equals,比较器等但是有没有办法使用反射来获取对象的属性并进行比较.

例如,如果我有一个Car对象,它作为轮子对象,它有轮胎对象,它有螺栓对象.请记住以上所有对象都是单独的而不是嵌套的类.如何比较2个汽车对象?

任何帮助表示赞赏?

谢谢

ska*_*man 17

Apache Commons Lang有一个EqualsBuilder类,它正是这样做的(参见reflectionEquals()方法)

 public boolean equals(Object obj) {
   return EqualsBuilder.reflectionEquals(this, obj);
 }
Run Code Online (Sandbox Code Playgroud)

EqualsBuilder 还为特定字段的空安全比较提供了更明确的方法,这使得编写"正确"(即非反射)等于方法的方法不那么繁琐.


cle*_*tus 8

public class Car {
  private Wheels wheels;
  // other properties

  public boolean equals(Object ob) {
    if (!(ob instanceof Car)) return false;
    Car other = (Car)ob;
    // compare properties
    if (!wheels.equals(other.wheels)) return false;
    return true;
  }
}
Run Code Online (Sandbox Code Playgroud)

是正确的方法.不建议通过反射进行自动比较.一方面,"状态"是比反映属性比较更通用的概念.

你可以写一些做深度反思比较的东西,但它有点遗漏了这一点.