インタフェースの改善

Java 8ではインタフェースでメソッドのデフォルトの実装を提供できるようになった。以下にデフォルト実装を提供するインタフェースの例を示す。

public interface HelloWorld {
  default public String hello(String name) {
    return "Hello " + name;
  }
}

このインタフェースを実装したクラスは、自分でメソッドを実装しなくてもインタフェースで定義されたメソッドが利用可能となる。もちろんデフォルト実装をオーバーライドすることも可能だ。

これはRubyやScalaにおけるMix-inと同じような機能と考えるとわかりやすいだろう。インタフェースを実装するために特定のオブジェクトに処理をデリゲートするような場合はインタフェースにデフォルト実装として定義しておくことで実装クラスでの冗長な記述が不要になる。

なお、Java 8ではインタフェースにstaticメソッドを定義することも可能になっている。インタフェースの実装を返すファクトリメソッドなどを、別途クラスを作らずに用意することができるようになった。これを利用したAPIデザインはJava SEでも取り入れられており、例えばStreamでは以下のようにStreamインタフェースのstaticメソッドとしてStreamを生成するためのファクトリメソッドが定義されている。

// インタフェースのstaticメソッドを使用したファクトリの例
Stream<String> stream = Stream.of("Java", "Groovy", "Scala");