[英]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() 方法也可能有效。 但要小心,因為最后兩個提到的解決方案只比較簡單的值。
class ManyVariables
的.java
文件equals()
的第一個提示中,驗證所有字段均已選中(如果尚未選中,請選中復選框),然后單擊“下一步”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.