关于override注解,我的理解是给程序员指明被注解方法是一个重写方法而已,天真的以为仅此而已,其实不然。Override是一个非常重要的注解,如果坚持使用这个注解,可以防止一大类的非法错误。
public class Bigram {private final char first;private final char second;public Bigram(char first, char second) {this.first = first;this.second = second;}public boolean equals(Bigram bigram) {return bigram.first == first && bigram.second == second;}public int hashCode() {return 31 * first + second;}public static void main(String[] args) {Set<Bigram> bigrams = new HashSet<Bigram>();for (int i = 0; i < 10; i++) {for (char ch = 'a'; ch <= 'z'; ch++) {bigrams.add(new Bigram(ch, ch));}}System.out.println(bigrams.size());}}
这段代码看上去好像没有什么问题。但是equals方法并没有达到目的,因为这是重载而不是重写,在Object定义的equals方法接受的参数是Object类型。
这种类型的bug实在太隐秘了,而添加上Override注解可以发现错误,因为编译器会报错。
**
