59

重複の可能性:
Java の @Override アノテーションをいつ使用し、その理由は?

@Overrideスーパークラスにそのメソッドがあることをコンパイラにチェックさせる以外に、メソッドに注釈を付ける理由はありますか?

4

4 に答える 4

56

あなたが説明したように、 @Override は、メソッドがオーバーライドされているコンパイル時のチェックを作成します。これは、上書きしようとするときにばかげた署名の問題がないことを確認するのに非常に役立ちます。

たとえば、次のエラーが表示されました。

public class Foo {
  private String id;
  public boolean equals(Foo f) { return id.equals(f.id);}
}

このクラスは記述どおりにコンパイルされますが、@Override タグを equals メソッドに追加すると、Object の equals メソッドをオーバーライドしないため、コンパイル エラーが発生します。これは単純なエラーですが、経験豊富な開発者の目から逃れることができます

于 2009-02-18T14:57:08.260 に答える
24

コンパイラのチェックを行うだけではありませんが、それで十分です。また、開発者の意図を文書化します。

たとえば、メソッドをオーバーライドしても、それを型自体のどこにも使用していない場合、後でコードにアクセスした人は、一体なぜそこにあるのか不思議に思うかもしれません。注釈はその目的を説明します。

于 2009-02-18T14:55:24.817 に答える
12

いいえ、あなたはかなりそれを釘付けにしました。

@Overrideコンパイラーにあなたの意図を伝えます: メソッドにタグを付ける場合@Override、スーパークラス (または Java 6 のインターフェース) から何かをオーバーライドするつもりでした。優れた IDE は、 のないメソッドをオーバーライドするメソッドにフラグを立てるの@Overrideに役立ちます。そのため、この 2 つを組み合わせることで、意図したことを実行していることを確認できます。

于 2009-02-18T14:58:00.037 に答える
2

いいえ -- 読みやすさも向上します (つまり、IDE が使用するインジケーターに加えて、メソッドがスーパークラスの宣言をオーバーライドしていることを簡単に見つけることができます)。

于 2009-02-18T14:56:06.313 に答える