複数のクラスのBeanをリストに設定し処理を行う場合、複数のクラスのBeanの親クラスを定義して、親クラスのリストに設定して処理を行えば、複数のクラスのBeanに対する処理を共通化することができる。
今回は、複数のクラスのBeanを1つのリストにまとめて処理を行ってみたので、そのサンプルプログラムを共有する。
前提条件
下記記事のIntelliJ IDEA Community版をダウンロード済であること。
IntelliJ IDEAをインストールしてみた「IntelliJ IDEA(インテリジェイ アイディア)」という、Eclipseと同等の機能をもつJava用統合開発環境を使って、Sp...
また、下記のように、「demoJava」というJavaプロジェクトを作成済であること。
なお、IntelliJ IDEA上でJavaプロジェクトを作成する方法については、IntelliJ IDEA Community版をダウンロードする記事内の、「IntelliJ IDEA上でのJavaプロジェクトの作成・実行」を参照のこと。
サンプルプログラムの作成
作成したサンプルプログラムの構成は以下の通り。
なお、上記の赤枠は、今回新規で作成したプログラムである。
複数のクラスのBeanの親クラスの内容は以下の通りで、抽象メソッドmethodOriginを含む抽象クラスとなっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 | package demo.java; // ABean, BBean, CBeanのスーパークラス public abstract class CommonBean { // サブクラスで処理を実装するabstractメソッド public abstract void methodOrigin(); // 共通のメソッド public void methodCommon() { System.out.println("これは共通のメソッドです。"); } } |
また、複数のクラスのBeanクラスの内容は以下の通りで、ABean, BBean, CBeanの3つのクラスを定義している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package demo.java; public class ABean extends CommonBean { @Override public void methodOrigin() { System.out.println("これはABeanクラスで定義されている独自メソッドです。"); } // ABeanクラス、BBeanクラスのみで定義するメソッド public void methodForAOrB() { System.out.println("これはABeanクラス、BBeanクラスのみで定義されているメソッドです。"); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package demo.java; public class BBean extends CommonBean { @Override public void methodOrigin() { System.out.println("これはBBeanクラスで定義されている独自メソッドです。"); } // ABeanクラス、BBeanクラスのみで定義するメソッド public void methodForAOrB() { System.out.println("これはABeanクラス、BBeanクラスのみで定義されているメソッドです。"); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | package demo.java; public class CBean extends CommonBean { @Override public void methodOrigin() { System.out.println("これはCBeanクラスで定義されている独自メソッドです。"); } // CBeanクラスのみで定義するメソッド public void methodForCBean() { System.out.println("これはCBeanクラスのみで定義されているメソッドです。"); } } |
さらに、メインクラスの内容は以下の通りで、複数のクラスのBeanを1つのリストにまとめて処理を行っていて、一部クラスのみの処理も実装している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | package demo.java; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.List; public class DemoMain { public static void main(String[] args) { // ABean, BBean, CBeanを共通のリストに設定 List<CommonBean> list = new ArrayList<>(); list.add(new ABean()); list.add(new BBean()); list.add(new CBean()); // 各Beanについて処理を繰り返す for (CommonBean bean : list) { // 共通のメソッドを実行 bean.methodCommon(); // 共通のabstractメソッドを実行 bean.methodOrigin(); // CBeanクラスのみで定義されているメソッドを実行 if (bean instanceof CBean) { ((CBean) bean).methodForCBean(); } // ABeanクラス、BBeanクラスのみで定義されているメソッドを実行 if (bean instanceof ABean || bean instanceof BBean) { try { Method method = bean.getClass().getDeclaredMethod("methodForAOrB"); method.invoke(bean); } catch (Exception ex) { System.err.println(ex); } } System.out.println(); } } } |
サンプルプログラムの実行結果
サンプルプログラムの実行結果は以下の通りで、ABean, BBean, CBeanそれぞれで定義されているメソッドを実行している。
要点まとめ
- 複数のクラスのBeanをリストに設定し処理を行う場合、複数のクラスのBeanの親クラスを定義して、親クラスのリストに設定して処理を行えば、複数のクラスのBeanに対する処理を共通化することができる。その際、条件指定すれば、一部クラスに対する処理の実装も行える。