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
还为特定字段的空安全比较提供了更明确的方法,这使得编写"正确"(即非反射)等于方法的方法不那么繁琐.
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)
是正确的方法.不建议通过反射进行自动比较.一方面,"状态"是比反映属性比较更通用的概念.
你可以写一些做深度反思比较的东西,但它有点遗漏了这一点.