yojikのlog

yojikのブログです

JavaのInterfaceにstaticメソッドを定義してる風で

どうも、正月テレビ漬けになってたおかげで、Perfumeののっちとかしゆかを逆に覚えてたことに気づいたおっさんです。3人の中ではごりあーちゃんファンです。

ThoughtWorksアンソロジーのドメインアノテーションの章で、JavaのInterfaceをアノテーションの代わりに利用してみるという節があります。でも結局色々な理由があってダメダメなわけです。そのダメダメな理由のうち、Interfaceにstaticメソッドを定義できないというのがあるんですが、これに関しては回避できるような気がしたので、試してみました。

Interfaceには実はstaticなネストクラスを定義することができます。それにメソッドを定義すればやりたい放題です。

public interface Sample {
    public static abstract class Methods {
        public static void echo(String echo) {
            System.out.println(echo);
        }
    }
}

Methodsがabstractなのは勝手にnewしないで欲しいという気持ちを伝えてるだけです。
使う方は、、

public class Main implements Sample  {
    public void test() {
        Methods.echo("TSET");
    }
}

ちなみに、これが役に立つかなーと思って考えてみたけど、、、意外に役に立たないっす。
static import とかenum型とかアノテーションが出てきたので、Interfeceを本来の目的以外に利用するハックは無意味になりましたね。

以上です。