【问题标题】:@Override on Implementation@Override 实现
【发布时间】:2010-07-25 11:43:46
【问题描述】:

你会把注解放在实现类方法中吗?它有什么用途吗?如果输入错误或没有,无论如何都是编译错误。

【问题讨论】:

    标签: java interface coding-style annotations


    【解决方案1】:

    虽然在重写方法时不需要使用此注解,但它有助于防止错误。如果标有@Override 的方法未能正确覆盖其超类之一中的方法,则编译器会生成错误。
    最好快速失败,尽快发现错误,而不是稍后发现您写了hashcode(),但您的意思是写hashCode()@Override 有助于尽早发现问题。

    关于 SO 的类似问题。

    另见this

    【讨论】:

      【解决方案2】:

      相当有用。如果使用 @Override 注释的方法没有真正覆盖超类中的方法,则会出现编译错误。

      例如,如果您有一个类 Foo 并且您创建了一个方法:

      @Override 
      public boolean equals (Foo foo) { ... }
      

      然后你会得到编译时错误,它会告诉你equals (Foo foo) 没有覆盖 Foo 的超类中的任何方法。

      当您使用 IDE 的某些代码生成功能时,现代 IDE(如 IntelliJ)会自动添加此注释。

      【讨论】:

      • 我认为 equals(Object) 与 equals(Blah) 是 @Override 如何帮助防止重大(但难以检测)程序员错误的最佳示例。
      【解决方案3】:

      我假设您询问的是在实现的接口中定义的注释方法,或者在超类中定义为abstract。在这种情况下,无论有没有@Override,方法签名中的拼写错误都会导致编译错误是正确的。但是,我认为注释仍然有助于将方法显式标记为实现接口。如果接口发生变化,在所有实现方法上添加@Override 注释可以帮助查明哪些方法签名已更改并需要更新。

      更重要的是,正如 mklhmnn 在他的回答中提到的,如果从接口中删除了一个方法,那么您实现类中的 @Override 注释将导致编译错误。如果没有注解,您可能不会意识到某个方法已从接口中删除,这可能会导致一些细微的错误。

      【讨论】:

        【解决方案4】:

        我不使用它,从来没有遇到过问题。我不知道为什么突然每个人都开始使用它(Eclipse?我也不使用)。

        重构不是问题,IDE 会为您检查。

        @Override 可能有助于提高代码的可读性,以便人类清楚发生了什么,而不是编译器。虽然我的 IDE 也会以图形方式标记覆盖方法,但不是很突出,但重点是,这是工具可以自动为我们做的事情。

        【讨论】:

          【解决方案5】:

          如果 API 发生变化,将方法标记为 @Override 将产生编译错误,因此不再有可用的超级方法。也许这就是原因。

          【讨论】:

            【解决方案6】:

            我认为这样做也很好,可以向你自己表明 Javadoc 在别处,你不会忘记它。

            【讨论】:

              猜你喜欢
              • 2014-12-28
              • 1970-01-01
              • 1970-01-01
              • 2012-06-12
              • 2010-09-17
              • 2011-06-27
              • 2010-10-02
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多