簡體   English   中英

java比較對象:使用反射?

[英]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都有哈希碼和等號的生成器,可以讓你選擇要考慮的屬性。 那些輕松擊敗反光對手的表現。

這個想法很有意思,但請注意反思可能很慢。 如果您需要進行大量的比較,或者將對象放在進行比較的集合類中(例如HashMapHashSet等),那么通過反射比較對象可能會成為性能瓶頸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM