【问题标题】:Why 2 return statements are mandatory in equals method为什么在 equals 方法中必须有 2 个 return 语句
【发布时间】:2014-08-06 06:54:23
【问题描述】:
public class MyStuff {
    String name;

    MyStuff(String n) {
        name = n;
    } 

    public static void main(String[] args) {
        MyStuff m1 = new MyStuff("guitar");
        MyStuff m2 = new MyStuff("tv"); 

        System.out.println(m2.equals(m1));
    }

    public boolean equals(Object o) {
        MyStuff m = (MyStuff) o;

        if (m.name != null)
            return true;

        return false;
    }
}

当我删除其中一个返回语句时,编译器给出错误:此方法必须返回布尔类型的结果

【问题讨论】:

  • 修复缩进会有所帮助。 return true 是一个 CONDITIONAL return,由上面的 if(m.name != null) 语句定义。
  • 如果你使用java,使用{}作为if子句!
  • if 不需要花括号。但是,如果您不使用它们,则在 if 语句中只考虑下一行。
  • 省略 {} 可能会导致以后出现许多错误。我在编辑别人的代码时遇到过很多次。始终使用括号。
  • 我认为这是个好问题。他是一个新手,现在他可能是一个更好的新手。

标签: java return equals


【解决方案1】:

return true 仅在if 条件为真时执行。对于所有其他情况,您需要return false

【讨论】:

    【解决方案2】:

    这很明显,因为您的代码实际上是

    ....
        MyStuff m = (MyStuff) o;
        if(m.name != null)
        {
            return true;
        }
        return false;
    }
    

    请使用括号,并在项目 -> 属性 -> Java 代码样式 -> 格式化程序 -> 配置工作区设置 -> 新建 -> 制作一个实际上很好的配置文件 -> 应用 -> 按 Ctrl+ 设置 Eclipse 格式化程序代码中的 Shift+F。

    其实我个人推荐Eclipse下面的Formatter设置,就是我用的那个:https://dl.dropboxusercontent.com/u/4363931/BestEclipseFormatterSettings.xml

    【讨论】:

      【解决方案3】:

      如果你的情况真的这么简单,那么只返回比较结果会简单得多:

      return m.name != null;
      

      进行布尔比较然后单独使用 if 块返回结果确实没有任何价值。

      【讨论】:

        【解决方案4】:

        如果只使用一个 return 语句,则 equals() 将仅在 m.name!=null 时返回结果,否则该方法没有任何其他 return 语句。所以编译器给出了错误。

        【讨论】:

          猜你喜欢
          • 2013-10-02
          • 2014-05-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-08-26
          • 1970-01-01
          • 2022-12-01
          • 1970-01-01
          相关资源
          最近更新 更多