Item 40@Overrideを使用した一貫したプレゼンテーション

8279 ワード

通常のプログラマーにとってjava内蔵のプレゼンテーションで最も重要なのは@Overrideです
@Overrideプロパティ
1.メソッド宣言のみ
2.このプレゼンテーションに依存する場合は、親タイプを再定義したメソッドを示します.
3.一貫して使用することで、様々な悪名高い誤りを予防することができます.
2つの40-1英字からなる文字列を表す「遅いエラー」を検索します.
public clas 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 b) {
        return b.first == first && b.second == second;
    }
    public int hashCode() {
        return 31 * first + second;
    }
    
    public static void main(String[] args) {
        Set<Bigram> s = new HashSet<>();
        for (int i = 0; i < 10; i++) {
            for(char ch = 'a'; ch <= 'z'; ch++)
                s.add(new Bigram(ch, ch));
        System.out.println(s.size());
    }
}
Setは反復を許さないので、26を出力することができるが、260を出力する.
equalsは「再定義」ではなく「多重定義」です.
このエラーはコンパイラで検索できますが、オブジェクトです.equalsの意図を明確に再定義しなければならない.
@Override public boolean equals(Bigram b) {
        return b.first == first && b.second == second;
}
@Overrideプレゼンテーションを使用して再コンパイルすると、コンパイルエラーが発生します.
間違ったところは明確に教えてくれるので、すぐに正しく直すことができます.
@Override public boolean equals(Object o) {
        if(!(o instanceOf Bigram)) 
            return false;
        Bigram b = (Bigram) o;
        return b.first == first && b.second == second;
}
親メソッドを再定義するすべてのメソッドに@Overrideコメントを追加します.

例外があります。特定のクラスで親の抽象メソッドを再定義する場合は、保留する必要はありません。


コアの整理


すべての再定義されたメソッドに@Overrideコメントが意図的に追加された場合、コンパイラはエラーが発生したときにに通知します.
  • 例外は、特定のクラスで親の抽象メソッドが再定義されている場合、この説明は必要ありません.