2009-07-01 9 views
1
可能性の重複

:@Override注釈のjavadocから
When do you use Java’s @Override annotation and why?はいつJavaで@Overrideを使用する

は、メソッドの宣言が がに意図されていることを示しますスーパークラスのメソッド の宣言をオーバーライドします。 メソッドにこの 注釈タイプで注釈が付けられていますが、スーパークラスメソッド が上書きされない場合は、コンパイラはエラーメッセージを生成するために が必要です。

タイプの特定のメソッドをテストし、テスト対象から呼び出される他のメソッドの動作を置き換えたい場合、@Overrideアノテーションをテストで使用する傾向がありました。私の同僚の一人は、これは有効な使用ではないが、なぜその理由がわからないのか、しっかりとしている。誰もそれが避けられるべき理由を提案することはできますか?

私の使用方法を説明するために、以下の例を追加しました。

試験対象fooの

:私はこのようなテストを定義し

public class Foo { 
    /** 
    * params set elsewhere 
    */ 
    private Map<String, String> params; 

    public String doExecute(Map<String, String> params) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    public String execute() { 
     return doExecute(params); 
    } 
} 

public void testDoExecute() { 
    final Map<String, String> expectedParams = new HashMap<String, String>(); 
    final String expectedResult= "expectedResult"; 
    Foo foo = new Foo() { 
     @Override 
     public String doExecute(Map<String, String> params) { 
      assertEquals(expectedParams, params); 
      return expectedResult; 
     } 
    }; 

    assertEquals(expectedResult, foo.execute()); 
} 

その後、私のdoExecute()の署名が変更された場合、私は私のテストでコンパイルエラーが発生します、むしろ混乱した実行失敗ではありません。

+0

デュプルですが、今すぐ見つけることができません... – jjnguy

+0

見つけた:http://stackoverflow.com/questions/94361/when-do-you-use-javas-override-annotation-and-why – AlbertoPL

+0

この質問には、コードを正しく表示するための編集が必要です。 –

答えて

5

この種のテストでオーバーライドアノテーションを使用することは完全に有効ですが、アノテーションはテストとはまったく関係がありません。それは、生産コードのすべてで使用することができます(また、使用する必要があります)。

+0

はい製品コードで使用しても問題ありません –

1

-Xlintを指定してコンパイルします。 @ Overrideや@Overrideを間違った場所に置いていないと不平を言うでしょう。

0

@Overrideは、誤ってオーバーロードするのではなく、実際にメソッドをオーバーライドすることを保証します。コンパイラの警告は、オーバーロードするメソッドをオーバーライドするかどうかを判断するのに役立ちます。

この場合、これを使用することは完全に正当ですが、テストであることを考えると、メソッドをオーバーライドする代わりにオーバーロードすると失敗します(メソッドシグネチャを変更するなど)。この場合。

2

@Overrideの目的は、メソッドをオーバーライドする意図を宣言しているので、間違い(メソッド名のスペルが間違っている、引数の型が間違っているなど)があると、コンパイラは不平を言って、 。

これは完全に有効な使用です。

関連する問題