繁体   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