Language 中級

インターフェースのprivateメソッド

privateメソッドを使ってインターフェース内の共有ロジックを抽出する。

✕ Java 8
interface Logger {
    default void logInfo(String msg) {
        System.out.println(
            "[INFO] " + timestamp() + msg);
    }
    default void logWarn(String msg) {
        System.out.println(
            "[WARN] " + timestamp() + msg);
    }
}
✓ Java 9+
interface Logger {
    private String format(String lvl, String msg) {
        return "[" + lvl + "] " + timestamp() + msg;
    }
    default void logInfo(String msg) {
        IO.println(format("INFO", msg));
    }
    default void logWarn(String msg) {
        IO.println(format("WARN", msg));
    }
}
このコードに問題がありますか? お知らせください。

コードの再利用

重複なしにデフォルトメソッド間でロジックを共有できます。

🔒

カプセル化

実装の詳細が実装クラスから隠蔽されます。

🧹

DRYなインターフェース

デフォルトメソッド間でのコピー&ペーストがなくなります。

旧来のアプローチ
重複したロジック
モダンなアプローチ
privateメソッド
JDKバージョン
9
難易度
中級
インターフェースのprivateメソッド
利用可能

JDK 9(2017年9月)以降、広く利用可能

Java 9ではインターフェースにprivateメソッドが使えるようになり、実装の詳細を実装クラスに公開することなく、デフォルトメソッド間でコードを共有できます。

共有 𝕏 🦋 in