关于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注解可以发现错误,因为编译器会报错。
**