代码之家  ›  专栏  ›  技术社区  ›  fastcodejava

@实现时重写

  •  3
  • fastcodejava  · 技术社区  · 14 年前

    是否将注释放入实现类方法中?它有什么作用吗?如果您输入错误或没有输入,这无论如何都是一个编译错误。

    6 回复  |  直到 14 年前
        1
  •  3
  •   Jason Day    14 年前

    我假设您询问的是在实现的接口中定义的注释方法,或者 abstract 在一个超级班级。在这种情况下,正确的做法是,方法签名中的错误将导致编译错误,无论是否 @Override . 但是,我认为注释对于将方法显式标记为实现接口仍然有帮助。如果界面发生变化, @重写 所有实现方法上的注释可以帮助确定哪些方法签名已更改并需要更新。

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

        2
  •  10
  •   Community CDub    8 年前

    虽然在重写方法时不需要使用此注释,但它有助于防止错误。如果方法标记为 @Override 未能正确重写其中一个超类中的方法,编译器将生成一个错误。
    最好尽快失败,尽快发现错误,而不是稍后发现你写的 hashcode() 但你想写 hashCode() . @重写 有助于尽早发现问题。

    类似的问题。

    也看到 this .

        3
  •  4
  •   Roman    14 年前

    它相当有用。如果用注释的方法 @Override 不会真正重写超类中的方法,这样会导致编译错误。

    例如,如果您有一个类 Foo 然后创建一个方法:

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

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

    现代的IDE(如intellij)在使用IDE的一些代码生成功能时自动添加此注释。

        4
  •  2
  •   irreputable    14 年前

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

    重构不是问题,不管怎样,IDE都会为您检查这个问题。

    @不过,重写可能有助于代码的可读性,这样人类就可以清楚地知道发生了什么,而不是编译器。尽管我的IDE也会以图形方式标记重写方法,但它并不突出,但要点仍然存在,这是工具可以自动为我们做的事情。

        5
  •  1
  •   Mot    14 年前

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

        6
  •  1
  •   user207421    14 年前

    我认为这样做也很好,因为它表明JavaDoc在其他地方,你没有忘记它。