【问题标题】:Simplify an Java boolean compare简化 Java 布尔比较
【发布时间】:2014-05-17 01:02:21
【问题描述】:

我找到了一个比较两个动作的equals方法,我想简化它。

public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final Move other = (Move) obj;
    return !(this.initialBalls != other.initialBalls &&
            (this.initialBalls == null || !this.initialBalls.equals(other.initialBalls)))
            && this.direction == other.direction && this.color == other.color;
}

有人有想法吗?

【问题讨论】:

  • 也许 CodeReview 的人可以帮助你:codereview.stackexchange.com
  • 那个 return 语句是不必要的复杂。前往 CR,我很乐意提供更简单的内容。
  • 这个问题似乎是题外话,因为它是关于代码审查的,因此属于该站点。
  • 为什么要简化呢?只是让它更具可读性,看起来还可以......

标签: java boolean equals


【解决方案1】:

如果你想写成一行,可以使用三元运算符:

return (obj == null || getClass() != obj.getClass()) ? false : [TODO: check if they are equal];

【讨论】:

    【解决方案2】:

    您可以使用来自 Apache Commons 的 EqualsBuilder。

    public boolean equals(Object obj) {
        if (obj == null) { return false; }
        if (obj == this) { return true; }
        if (obj.getClass() != getClass()) {
            return false;
        }
        Move rhs = (Move) obj;
        return new EqualsBuilder()
            .appendSuper(super.equals(obj))
            .append(initialBalls, rhs.initialBalls)
            .append(direction, rhs.direction)
            .append(color, rhs.color)
            .isEquals();
        }
    

    【讨论】:

    • 为什么要为此额外依赖?
    • 为什么不呢?我是否在 OP 中错过了不允许第 3 方库的约束?当您比较的字段是浮点值时,您知道实现equals() 的正确方法吗?您是否也信任与您合作的所有开发人员?如果您的字段不是原语,它还可以节省大量 null 检查。
    • 红鲱鱼多吗?您仍然无法证明使用完整的库是合理的,您可以通过在正确的位置添加一些空格/新行或移动一些字符来轻松地自行修复。而且我不是泛泛而谈,而是关于 OP 的任务,这绝对是微不足道的。
    • @user16547 所以你可以通过移动一些字符并添加空格和新行来修复浮点比较?您知道 OP 中比较的 direction 和 color 字段的数据类型吗?为什么不使用适当处理所有内容的库而不是滚动您自己的解决方案?根据您在这里所说的,您提出的解决方案可能会以您意想不到的方式失败。
    • @user16547 很明显,您无法为这个问题提供答案。
    猜你喜欢
    • 1970-01-01
    • 2015-05-18
    • 2019-05-28
    • 2012-08-19
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多