Java 9のインターフェースで定義できる変数・メソッドの種類とは?
Java 9以降、インターフェースの中にprivateメソッドおよびprivate staticメソッドを定義できるようになりました。インターフェースでprivateメソッドを活用する最大のメリットは、defaultメソッドやstaticメソッド間におけるコードの重複を削減できる点です。
たとえば、2つ以上のdefaultメソッドが同じ共通処理を必要としている場合、その処理をprivateメソッドとして切り出し、それぞれのdefaultメソッドから呼び出すことで、コードの保守性と可読性を高めることができます。
Java 9のインターフェースで定義できる要素一覧
Java 9では、インターフェース内に以下の6種類の変数・メソッドを定義することが可能です。
- 定数
- 抽象メソッド
- デフォルトメソッド
- staticメソッド
- privateメソッド
- private staticメソッド
サンプルコード
次の例では、private staticメソッドを使ってデータストリームの生成処理を共通化し、2つのstaticメソッドから呼び出しています。
import java.util.*;
import java.util.stream.*;
interface InterfaceTest {
static void printEvenNumbers() {
getDataStream().filter(i -> i % 2 == 0).forEach(System.out::println);
}
static void printOddNumbers() {
getDataStream().filter(i -> i % 2 != 0).forEach(System.out::println);
}
// private staticメソッド:共通処理をここに集約
private static Stream<Integer> getDataStream() {
List<Integer> list = Arrays.asList(10, 13, 5, 15, 12, 20, 11, 25, 16);
return list.stream();
}
}
public class InterfacePrivateMethodTest implements InterfaceTest {
public static void main(String args[]) {
System.out.println("The even numbers: ");
InterfaceTest.printEvenNumbers();
System.out.println("The odd numbers: ");
InterfaceTest.printOddNumbers();
}
}実行結果
The even numbers: 10 12 20 16 The odd numbers: 13 5 15 11 25
ポイントまとめ
- privateメソッドはインターフェース内部でのみ使用でき、実装クラスからは呼び出せません。
- private staticメソッドはstaticメソッドやdefaultメソッドの両方から利用できます。
- 共通ロジックをprivateメソッドに集約することで、重複コードを排除し、変更時の修正箇所を1か所に抑えられます。
-
JavaのFocusListenerインターフェースとは?重要性と実装方法を解説
FocusListenerインターフェースとはJava AWT/SwingにおけるFocusListenerは、コンポーネントがキーボードフォーカスを取得・喪失したタイミングで発生するイベントを受け取るためのリスナーインターフェースです。ユーザーがどのコンポーネントを操作しているのかを検知できるため、入力フォームのバリデーションやガイド表示など、対話的なUIを実現するうえで重要な役割を担います。フォーカスイベントは、コンポーネントがキーボードフォーカスを取得または喪失したときに生成されます。フォーカスイベントを表すオブジェクトは、FocusEventクラスから作成されます。FocusEvent
-
Java 8のインターフェースで使える静的メソッドの基本と実践例
Java 8におけるインターフェースの静的メソッドとはJava 8以降、インターフェースには静的メソッド(staticメソッド)を定義できるようになりました。これにより、ユーティリティ的なヘルパーメソッドをインターフェース内に直接記述でき、関連する処理をひとまとめに管理しやすくなります。静的メソッドは「インターフェース名.メソッド名()」の形式で呼び出すのが基本です。実装クラスのインスタンスからは直接呼び出せず、オーバーライドもできない点に注意しましょう。静的メソッドを持つインターフェースの定義例次の例では、Vehicleインターフェースにデフォルトメソッド print() と、静的メソッド