关于override注解,我的理解是给程序员指明被注解方法是一个重写方法而已,天真的以为仅此而已,其实不然。Override是一个非常重要的注解,如果坚持使用这个注解,可以防止一大类的非法错误。

    1. public class Bigram {
    2. private final char first;
    3. private final char second;
    4. public Bigram(char first, char second) {
    5. this.first = first;
    6. this.second = second;
    7. }
    8. public boolean equals(Bigram bigram) {
    9. return bigram.first == first && bigram.second == second;
    10. }
    11. public int hashCode() {
    12. return 31 * first + second;
    13. }
    14. public static void main(String[] args) {
    15. Set<Bigram> bigrams = new HashSet<Bigram>();
    16. for (int i = 0; i < 10; i++) {
    17. for (char ch = 'a'; ch <= 'z'; ch++) {
    18. bigrams.add(new Bigram(ch, ch));
    19. }
    20. }
    21. System.out.println(bigrams.size());
    22. }
    23. }

    这段代码看上去好像没有什么问题。但是equals方法并没有达到目的,因为这是重载而不是重写,在Object定义的equals方法接受的参数是Object类型。

    这种类型的bug实在太隐秘了,而添加上Override注解可以发现错误,因为编译器会报错。
    **