インタフェースには違いないAwareインタフェース
Struts2やSpring frameworkの中にはAwareの接尾辞をつけているインタフェースがあります。
役目としてはインタフェースと何ら変わらないのですが、特定のクラスに対して役割を付与する意味で使われます。
例えばStruts2では、Actionクラスに機能拡張させる意味でセッション属性を扱えるSessionAwareや、クッキー情報を扱えるCookieAwareなどです。
インタフェースなので、実装宣言したインタフェースの内容を実装するのも変わりませんが、利用するメソッドと関連するフィールドはほぼ変えることなく利用できるものがほとんどです。
例えば SessionAwareはセッション情報を管理するインタフェースなので、以下の実装が必須です。
public Map<String,Object> getSession() {
return session;
}
Map<String,Object> session;
Java8でインタフェースにdefault動作が追加されたことによる恩恵
defaultメソッドを提供することで、実装クラスにインタフェースの実装をすることなく、宣言だけで解決できます。
ただしインタフェースのフィールドは、public、static、finalの3つのみ許可されるため、アクセスレベルの制限から、これらのインタフェースのdefaultを定義する場合には、状態を持たないチェック機構として実装するのが良さそうです。
例えば
- 管理者としてログインしているかを判定する
- 登録しているデータが本人のものかを判定する
- 入力されたモデルに正しく値が入力されているか判定する
などなど、入力チェックごとにインタフェースを作成し、必要に応じて実装するか、これらの入力チェックを束ねたスーパーインタフェースを作って、実装クラスではその中から利用するメソッドのみ実行する、といったことも可能でしょう。