簡體   English   中英

將對象與許多(私有)變量進行比較的有效方法

[英]Efficient way to compare objects with many (private) variables

我有一個類,其中包含一長串像這樣的私有變量

class ManyVariables {
    private int var1;
    private int var2;
    //....
    private int var49;
    
    public int getVar1(){};
    public int getVar2(){};
    //....
    public int getVar49(){};
}

我正在嘗試覆蓋equals方法,以便它比較兩個實例的所有變量,但是,由於變量列表很長, 手動將它們全部輸入確實並不理想。 有沒有辦法將它們全部放入Stream對象並使用Stream的管道進行比較? 我知道我也可以使用反射,但我不想將私有字段設置為在運行時可訪問。 謝謝!

因此,您可以像前面所說的那樣構建一個方法,通過 IDE 生成它,或者將它放在 JSON 對象中並比較字符串。 我沒有看到任何其他方式。

有一些庫可以將您的對象轉換為 JSON 或任何其他字符串格式。 甚至 toString() 方法也可能有效。 但要小心,因為最后兩個提到的解決方案只比較簡單的值。

  1. 使用 IntelliJ 或 Eclipse 之類的 IDE。 我將在這個答案中使用 IntelliJ。
  2. 打開class ManyVariables.java文件
  3. 將光標放在類體內的某處
  4. 轉到菜單:“代碼”,然后“生成”
  5. 在彈出窗口中,選擇“equals() 和 hashCode()”
  6. equals()的第一個提示中,驗證所有字段均已選中(如果尚未選中,請選中復選框),然后單擊“下一步”
  7. hashCode()的第二個提示中,再次驗證所有字段都已檢查,然后“完成”

這是一個例子,從這個類開始:

class Example {
    private int a;
    private int b;
    private int c;
}

使用自動生成后,我有這個:

class Example {
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        Example example = (Example) o;

        if (a != example.a) return false;
        if (b != example.b) return false;
        return c == example.c;
    }

    @Override
    public int hashCode() {
        int result = a;
        result = 31 * result + b;
        result = 31 * result + c;
        return result;
    }

    private int a;
    private int b;
    private int c;
}

暫無
暫無

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

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