您可以将注释放在实现类方法中吗?它有什么用途?如果您输错或没有输入,无论如何都是编译错误。@Override on Implementation
回答
我假设你问的是在一个已实现的接口中定义的注释方法,或者是超类中的abstract
。在这种情况下,您正确地指出方法签名中的拼写错误会导致编译错误,无论有没有@Override
。不过,我认为注解对于明确地将方法标记为实现接口仍然很有帮助。如果界面发生变化,在所有实施方法上注解@Override
可帮助确定哪些方法签名已更改并需要更新。
更重要的是,正如mklhmnn在他的回答中提到的,如果一个方法从界面中删除,实现类中的@Override
注释将导致编译错误。如果没有注释,您可能并不知道从界面中删除了一个方法,这可能会导致微妙的错误。
这很有用。如果使用@Override
注解的方法并未真正覆盖超类中的方法,则会出现编译错误。
举例来说,如果你有一个类Foo
与您共创方法:
@Override
public boolean equals (Foo foo) { ... }
,那么你会得到编译时错误,会告诉你,equals (Foo foo)
不重写Foo的超类的任何方法。
当您使用IDE的某些代码生成功能时,现代IDE(如IntelliJ)会自动添加此注释。
虽然重写方法时不需要使用此注释,但它有助于防止错误。如果标记为@Override
的方法无法正确覆盖某个超类中的某个方法,则编译器会生成一个错误。
它更好地失败快,赶上错误,而不是稍后找出你写的hashcode()
,但你的意思是写hashCode()
。 @Override
有助于及早发现问题。
SO上的相似问题。
- when-do-you-use-javas-override-annotation-and-why?
- should-i-add-an-override-annotation-when-implementing-abstract-methods?
另见this。
将方法标记为@Override将在API更改时产生编译错误,因此不再有超级方法可用。也许这就是原因。
我不使用它,从来没有问题。我不知道为什么突然每个人都开始使用它(Eclipse,我也不使用它)。
重构不是问题,无论如何IDE会为您检查。
@Override虽然可以帮助代码的可读性,但是人们很清楚发生了什么,而不是编译器。虽然我的IDE也会以图形方式标记重写方法,但它不是很突出,但重点仍然是,这是工具可以为我们自动完成的工作。
我认为这样做也很好,因为这表明Javadoc在其他地方,您不会忘记它。
- 1. Session Override implementation
- 2. @Override on方法onApplicationEvent
- 3. 跳过KeyDown On Override ProcessCmdKey EventHandller
- 4. 如果我们有@Override为什么没有@Implementation或@ Implements`?
- 5. 表面视图画布。 @Override on key
- 6. FloatingActionButton with checkable implementation
- 7. C#List implementation ... in Java
- 8. TFIDF:tf implementation
- 9. 在@implementation
- 10. TestCleanup()Implementation
- 11. 在@implementation
- 12. quicksort implementation
- 13. AsyncTask Implementation
- 14. is_member_function_pointer implementation
- 15. css class override override bootstrap-maven class
- 16. jTable isCellEditable override override not working
- 17. Linq.Dyanmic GroupJoin implementation
- 18. Facebook Like Button Implementation
- 19. MonadBaseControl IO ... StateT Implementation
- 20. Boost named_condition implementation
- 21. Debugging Mergesort Implementation
- 22. Nodejs Modules Implementation
- 23. SVD implementation map reduce
- 24. mod_auth_tkt -java implementation
- 25. FibonacciHeap increase_key implementation
- 26. C#:IComparable implementation private
- 27. node js browserify implementation
- 28. jquery/angular scheduler implementation
- 29. android viewPager implementation
- 30. #react-native - Onesignal implementation
我认为equals(Object)vs equals(Blah)是@Override如何帮助防止主要(但很难察觉)程序员错误的最好例子。 – Thien 2010-07-25 19:22:59