interface に default, static メソッドが定義できるようになった


ちょっと前から Java8 でインターフェースに static メソッドが書けるのは気づいていて、strategy の Factory とか作るとき、クラスに切り出すのめんどくさくなったら Static Factory メソッドに書こうかとひそかにもくろんでいたんだけど。

public interface HogeI {

  // Static factory method
  static HogeI createHoge(Type type) {
    if (type == ***) {
      return new Hoge***();
    } else if (type == xxx) {
      return new Hogexxx()
    }
    throw new XxxxException();
  }

  void update();
  void remove();
  ・・・
}

最近 ここの記事を見ていたら default っていうキーワードでインスタンスメソッドも定義できるようになっていて驚きました。

何が便利かというと。僕が説明するより ↓ の説明が大変わかりやすかった。

浅はかな僕は 「じゃー abstract なんていらないじゃない!」 と思っていたけど。。。

メソッド公開したくない時 interface じゃできないから abstract が必要だと同僚に指摘されました。

オーバーライドも何か違いがあるのかもしれないけど確認してません。

ぎゃふん。



Hiroyuki Maeda

mae0003

blog comments powered by Disqus