2017-08-17 13 views
4

私は、Javaの@Overrideアノテーションは、コンパイル時にスーパークラスのメソッドを実際にオーバーライドしているかどうかをコンパイラにチェックして確認するようコンパイラに伝えるだけです。Javaで@Overrideアノテーションはどのように機能しますか?

私が読んだ記事から:https://dzone.com/articles/how-annotations-work-java

@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.SOURCE) 
public @interface Override { 
} 

この注釈の定義は、スーパークラスで同じメソッドシグネチャを探すために、コンパイラに伝えるには何のロジックを持っていない:

@Overrideアノテーション定義は、以下の単純です。

Javaコンパイラで定義されている同じメソッドシグネチャのスーパークラスを確認するロジックはありますか?

+0

はい、そうです。 @Overrideで注釈が付けられたメソッドが実際に何もオーバーライドしない場合、コンパイルエラーが発生します。それは注釈の宣言の一部ではありません。 – f1sh

+0

コンパイラはアノテーションをクロールするので、メソッドのシグネチャをチェックするロジックが最終的にコンパイラに関係することになります。また、保持ポリシーは、注釈がその後破棄されると述べているためです。 – Mena

答えて

2

これはコンパイラのヒントです。 @Overrideで注釈を付けると、スーパークラスからメソッドをオーバーライドしたことをコンパイラに伝えます。コンパイラは、このメソッドを実際にオーバーライドしたかどうかをチェックし、そうでない場合は警告を出します。これは、スペルを正しくするために特に役立ちます。コンパイラは実際にこのロジックを実装しています。

関連する問題