[英]java compare objects: using reflection?
我有一個對象本身有多個對象作為字段。 我的問題是,我有兩個這類對象,我想比較這兩個。 我知道我可以做equals,比較器等但有一種方法可以使用反射來獲取對象的屬性並進行比較。
例如,如果我有一個Car對象,它作為輪子對象,它有輪胎對象,它有螺栓對象。 請記住以上所有對象都是單獨的而不是嵌套的類。 如何比較2個汽車對象?
任何幫助表示贊賞?
謝謝
Apache Commons Lang有一個EqualsBuilder類,它正是這樣做的(參見reflectionEquals()
方法)
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
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;
}
}
是正確的方法。 不建議通過反射進行自動比較。 一方面,“狀態”是比反映屬性比較更通用的概念。
你可以寫一些做深度反思比較的東西,但它有點遺漏了這一點。
大多數現代IDE都有哈希碼和等號的生成器,可以讓你選擇要考慮的屬性。 那些輕松擊敗反光對手的表現。
這個想法很有意思,但請注意反思可能很慢。 如果您需要進行大量的比較,或者將對象放在進行比較的集合類中(例如HashMap
, HashSet
等),那么通過反射比較對象可能會成為性能瓶頸。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.