[英]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.