複数のクラスの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を含む抽象クラスとなっている。
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つのクラスを定義している。
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クラスのみで定義されているメソッドです。");
}
}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クラスのみで定義されているメソッドです。");
}
}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つのリストにまとめて処理を行っていて、一部クラスのみの処理も実装している。
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に対する処理を共通化することができる。その際、条件指定すれば、一部クラスに対する処理の実装も行える。





