前述したように、Java 8 ではデフォルトのメソッドが導入され、インターフェイスに本体のあるメソッドを含めることが可能になりました。この機能は、Java API のインターフェイスを進化させながら下位互換性をサポートするために導入されました。
デフォルトのメソッドを使用する場合:
ただし、デフォルトのメソッドを使いすぎると、インターフェースが肥大化する可能性があります。これらは、デフォルトの動作が多くの実装にわたって本当に役立つ場合のために予約されている必要があります。
例:
public interface Movable { void move(); default void stop() { System.out.println("Movement stopped."); } }
この例では、stop() は、Movable インターフェースを実装するクラスによってオーバーライドできるデフォルトの実装を提供します。
Java 8 では静的メソッドもインターフェースに導入されました。これらのメソッドはインターフェース自体に属し、インターフェースを実装するクラスのインスタンスには属しません。これにより、インターフェイスの機能に直接関連するユーティリティ メソッドを提供できます。
静的メソッドを使用する場合:
例:
public interface Calculator { int calculate(int a, int b); static int add(int a, int b) { return a + b; } }
ここで、add() メソッドは、Calculator を実装するクラスのインスタンスを作成せずに呼び出すことができるユーティリティ関数です。
ベスト プラクティス: インターフェイスのドメインに論理的に属するユーティリティ関数には静的メソッドを使用します。オーバーライドする必要がある可能性のある機能には使用しないでください。
関数型インターフェイスは、抽象メソッドを 1 つだけ持つインターフェイスです。この概念は、Java 8 でのラムダ式の導入により特に強力になり、より簡潔で読みやすいコードを作成できるようになりました。
機能インターフェイスの例:
@FunctionalInterface public interface Processor { void process(String input); }
ラムダ式を使用して、このインターフェイスを簡潔に実装できます。
Processor processor = input -> System.out.println("Processing: " + input); processor.process("Data");
関数インターフェースを使用する場合:
ヒント: @FunctionalInterface アノテーションを利用して、インターフェイスが機能し続けることを保証します (つまり、抽象メソッドが 1 つだけであることを確認します)。
印刷、スキャン、FAX が可能な多機能デバイスのシステムを設計します。このシステムを設計するために、インターフェイス、抽象クラス、デフォルト メソッド、および静的メソッドをどのように使用するかを考えてください。一般的な動作は何でしょうか?また、各関数の実装に柔軟性を持たせるにはどうすればよいでしょうか?
以上がインターフェースのデフォルトメソッドと静的メソッドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。