Javaその他

Javaのジェネリクスを利用して処理の共通化をしてみた

Javaのジェネリクスを利用すると、同一のスーパークラスをもつサブクラスに対する同じ処理を、共通化することができる。

今回は、ジェネリクスを利用して、引数で受け取ったサブクラスのオブジェクトを生成し、そのスーパークラスの値を設定する処理を実装してみたので、そのサンプルプログラムを共有する。

前提条件

下記記事の「IntelliJ IDEA上でSpring Bootプロジェクトの読み込み」までの処理が完了していること。

IntelliJ IDEA上でGradleを使ってWeb画面のSpring Bootプロジェクトを作成してみたSpring Bootのプロジェクトを新規作成を「IntelliJ IDEA」のメニューから実施しようとしたところ、無料の「Commun...

サンプルプログラムの内容

作成したサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成
なお、上記の赤枠のうち、「build.gradle」は今回変更したプログラムで、他は新規で作成したプログラムとなる。「DemoUtil.java」に、ジェネリクスを利用したメソッドが含まれている。

「build.gradle」の内容は以下の通り。lombokを利用するための設定を追加している。

また、スーパークラス「DemoSuperObj.java」の内容は以下の通り。

さらに、サブクラス「DemoSubObj1.java」「DemoSubObj2.java」の内容は以下の通り。

また、「DemoUtil.java」の内容は以下の通り。

Javaのジェネリクスを利用しており、第一引数にDemoSuperObjまたはそのサブクラスを渡し、そのクラスのオブジェクトを戻り値として返却するような仕組みになっている。

なお、ジェネリクスについての詳細は以下を参照のこと。
https://qiita.com/rodentia6/items/b36d134fa24867ba4d63

さらに、「DemoMain.java」の内容は以下の通り。DemoSubObj1のオブジェクトを生成して約1秒後に、DemoSubObj2のオブジェクトを生成している。

「DemoMain.java」の実行結果は以下の通りで、スーパークラス「DemoSuperObj.java」の各値が設定されているのが確認できる。
サンプルプログラムの実行結果

要点まとめ

  • Javaのジェネリクスを利用すると、同一のスーパークラスをもつサブクラスに対する同じ処理を、共通化することができる。