Javaの内部インタフェースの手引き

Javaの内部インターフェイスのガイド

1. 前書き

この短いチュートリアルでは、Javaの内部インターフェイスについて説明します。 主に以下に使用されます。

  • インターフェイスに共通名がある場合のネームスペースの問題の解決

  • カプセル化の増加

  • 関連するインターフェースを1か所にグループ化することで読みやすさを向上

よく知られている例は、Mapインターフェイス内で宣言されているEntryインターフェイスです。 このように定義されたインターフェースはグローバルスコープではなく、Map.Entryとして参照され、他のEntryインターフェースと区別され、Mapとの関係が明確になります。

2. 内部インターフェイス

定義により、内部インターフェイスの宣言は、別のインターフェイスまたはクラスの本体で発生します。

これらは暗黙的にパブリックで静的であり、別のインターフェイスで宣言されたときのフィールド(トップレベルインターフェイスでのフィールド宣言と同様)であり、どこにでも実装できます。

public interface Customer {
    // ...
    interface List {
        // ...
    }
}

Inner interfaces declared within another class are also staticですが、実装できる場所を制約できるアクセス指定子を持つことができます。

public class Customer {
    public interface List {
        void add(Customer customer);
        String getCustomerNames();
    }
    // ...
}

上記の例では、Listインターフェイスがあり、新しいものの追加、String表現の取得など、Customersのリストに対するいくつかの操作を宣言する役割を果たします。

Listは一般的な名前であり、このインターフェイスを定義する他のライブラリを操作するには、宣言を分離する必要があります。つまり、namespaceです。

これは、CustomerList.のような新しい名前を使用したくない場合に、内部インターフェイスを利用する場所です。

また、カプセル化を改善する2つの関連するインターフェイスを一緒に保持しました。

最後に、実装を続行できます。

public class CommaSeparatedCustomers implements Customer.List {
    // ...
}

3. 結論

Javaの内部インターフェイスを簡単に確認しました。

いつものように、コードサンプルはover on GitHubで見つけることができます。