工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Industrial programming >> Java

Java 9プライベートインターフェースメソッド:カプセル化とコード再利用を強化

Java 8以前では、インターフェースには以下のタイプの変数/メソッドのみ定義可能でした。

つまり、インターフェースにメソッド実装、より正確にはデフォルト実装を持たせることはできませんでした。例を見てみましょう。

Java 8での改善:デフォルトメソッドとstaticメソッド

Java 8からインターフェースに以下が追加されました。

共通処理(DB接続の開閉など)をインターフェースのデフォルトメソッドとstaticメソッドにまとめることで、実装クラスでの重複を排除できます。

Java 9でのさらなる改善:プライベートメソッド

Java 9ではインターフェースに以下が追加されました。

プライベートメソッドを使うことで、デフォルトメソッド間で共通ロジックを共有しつつ、外部に公開しないヘルパーメソッドを定義できます。

Java 9での実装例

public class Tester {
    public static void main(String[] args) {
        LogOracle log = new LogOracle();
        log.logInfo("");
        log.logWarn("");
        log.logError("");
        log.logFatal("");
        LogMySql log1 = new LogMySql();
        log1.logInfo("");
        log1.logWarn("");
        log1.logError("");
        log1.logFatal("");
    }
}

final class LogOracle implements Logging { }
final class LogMySql implements Logging { }

interface Logging {
    String ORACLE = "Oracle_Database";
    String MYSQL = "MySql_Database";
    
    // プライベートメソッド(共通ロジック)
    private void log(String message, String prefix) {
        getConnection();
        System.out.println("Log Message : " + prefix);
        closeConnection();
    }
    
    // デフォルトメソッドからプライベートメソッドを呼び出し
    default void logInfo(String message) { log(message, "INFO"); }
    default void logWarn(String message) { log(message, "WARN"); }
    default void logError(String message) { log(message, "ERROR"); }
    default void logFatal(String message) { log(message, "FATAL"); }
    
    // プライベートStaticメソッド
    private static void getConnection() {
        System.out.println("Open Database connection");
    }
    private static void closeConnection() {
        System.out.println("Close Database connection");
    }
}

出力

Open Database connection
Log Message : INFO
Close Database connection
Open Database connection
Log Message : WARN
Close Database connection
Open Database connection
Log Message : ERROR
Close Database connection
Open Database connection
Log Message : FATAL
Close Database connection

複数のデフォルトメソッド衝突の解決

2つのインターフェースに同名のデフォルトメソッドがある場合の解決方法:

  1. 実装クラスで独自メソッドを定義してオーバーライド
  2. InterfaceName.super.methodName()で特定のインターフェースのデフォルトメソッドを明示呼び出し

Java

  1. Javaメソッド:定義、呼び出し、効果的な活用法
  2. Javaアクセス修飾子の完全ガイド:種類、ルール、実践例
  3. Java抽象クラスとメソッド:包括的ガイド
  4. Javaインターフェース完全ガイド:概念、実装、ベストプラクティス
  5. Java NavigableSetインターフェースをマスター:ナビゲーション、ソート、実践例
  6. Javaラムダ式完全ガイド:基礎からStream APIまで
  7. Java String toLowerCase() & toUpperCase():ロケール対応テキストケース変換
  8. Javaインターフェース完全ガイド: 定義・実装・多重継承・タグインターフェース
  9. Javaでメールを送信する方法:ステップバイステップガイド
  10. Java 9コレクションファクトリメソッド:不変List、Set、Mapを簡潔に作成
  11. Java 8デフォルトメソッド解説:インターフェース拡張と後方互換性