【发布时间】:2010-07-25 11:43:46
【问题描述】:
你会把注解放在实现类方法中吗?它有什么用途吗?如果输入错误或没有,无论如何都是编译错误。
【问题讨论】:
标签: java interface coding-style annotations
你会把注解放在实现类方法中吗?它有什么用途吗?如果输入错误或没有,无论如何都是编译错误。
【问题讨论】:
标签: java interface coding-style annotations
虽然在重写方法时不需要使用此注解,但它有助于防止错误。如果标有@Override 的方法未能正确覆盖其超类之一中的方法,则编译器会生成错误。
最好快速失败,尽快发现错误,而不是稍后发现您写了hashcode(),但您的意思是写hashCode()。 @Override 有助于尽早发现问题。
关于 SO 的类似问题。
另见this。
【讨论】:
相当有用。如果使用 @Override 注释的方法没有真正覆盖超类中的方法,则会出现编译错误。
例如,如果您有一个类 Foo 并且您创建了一个方法:
@Override
public boolean equals (Foo foo) { ... }
然后你会得到编译时错误,它会告诉你equals (Foo foo) 没有覆盖 Foo 的超类中的任何方法。
当您使用 IDE 的某些代码生成功能时,现代 IDE(如 IntelliJ)会自动添加此注释。
【讨论】:
我假设您询问的是在实现的接口中定义的注释方法,或者在超类中定义为abstract。在这种情况下,无论有没有@Override,方法签名中的拼写错误都会导致编译错误是正确的。但是,我认为注释仍然有助于将方法显式标记为实现接口。如果接口发生变化,在所有实现方法上添加@Override 注释可以帮助查明哪些方法签名已更改并需要更新。
更重要的是,正如 mklhmnn 在他的回答中提到的,如果从接口中删除了一个方法,那么您实现类中的 @Override 注释将导致编译错误。如果没有注解,您可能不会意识到某个方法已从接口中删除,这可能会导致一些细微的错误。
【讨论】:
我不使用它,从来没有遇到过问题。我不知道为什么突然每个人都开始使用它(Eclipse?我也不使用)。
重构不是问题,IDE 会为您检查。
@Override 可能有助于提高代码的可读性,以便人类清楚发生了什么,而不是编译器。虽然我的 IDE 也会以图形方式标记覆盖方法,但不是很突出,但重点是,这是工具可以自动为我们做的事情。
【讨论】:
如果 API 发生变化,将方法标记为 @Override 将产生编译错误,因此不再有可用的超级方法。也许这就是原因。
【讨论】:
我认为这样做也很好,可以向你自己表明 Javadoc 在别处,你不会忘记它。
【讨论】: