@Overrideの姉弟。
@Override アノテーションってあるじゃないですか。
「オーバーライドの対象である」という意図をコンパイラに明示するもので、メソッド名のtypoや引数型のミスを指摘してくれる、便利なアノテーションです。
このアノテーション、好きです。愛してます。
ただ、@Override に姉さんと弟さんが欲しいな、と最近思ったのであります。名付けて @Implement と…。んー、弟の名前が思いつかない。とりあえず @Through にしときましょう。
public interface Sample { void sampleMethodA(); void sampleMethodB(); } @Through("sampleMethodB") public abstract class AbstractSample implements Sample { public void execute() { /* … */ } @Implement public void samplemethodA() { /* … */ } } public class SampleImpl extends AbstractSample { @Implement public void samplemethodB() { /* … */ } }
例えばこんなコード。
@Implement は「interfaceの実装だよ」という意図を、@Through は「このクラスでは実装せず(実装をスルーして)、abstractとして子クラスに実装を任せる」という意図をコンパイラに伝えるアノテーションとします。
例えば、従来ですと Sample#sampleMethodA() が不要になって削除した場合、コンパイルエラーは発生しませんが、AbstractSampleにエラーが発生してほしい。そしてまた、Sample#sampleMehodC() を追加した場合、必要なメソッドが実装されていないというエラーは SampleImpl に発生するが、AbstractSample に発生して欲しい…。
そんなん、無いですよねー…。