@Overrideアノテーション

Java5 では interface のメソッドの実装に @Override を付けるとエラーとなってしまうが、 Java6 ではエラーにならなくなった。

Struts2の仕組みのような場合 @Override を付けるのは必須だと思う。

例えば、あるアクションで

public class Foo implements SessionAware {
  :

  public void setSession( Map map ) {
  }
}

のような事をしていて、色々クラス構成を調整していて

public class Foo {
  :

  public void setSession( Map map ) {
  }
}

となった場合に、もはや setSession は呼ばれなくなってしまうが、@Overrideをつけておけば、コンパイルエラーとなり、注意を喚起してくれる。

public class Foo {
  :

  @Override   // これがあれば、setSession はコンパイルエラーとなる
  public void setSession( Map map ) {
  }
}

なので、Struts2がDIするものには @Override をつけることにする。

public class Foo implements SessionAware {
  :

  @Override   // SessionAware
  public void setSession( Map map ) {
  }
}

ちょっとTIPS:こうしても所定のインターセプターが入っていなければ呼ばれない、インターセプターが無い場合をチェックするような仕組みが欲しい

参考: 「アノテーションに @Override があるのに @Implements のようなものがないのはなぜ?」(1) Java Solution − @IT