Javaその他

複数のクラスのBeanを1つのリストにまとめて処理を行ってみた

複数のクラスのBeanをリストに設定し処理を行う場合、複数のクラスのBeanの親クラスを定義して、親クラスのリストに設定して処理を行えば、複数のクラスのBeanに対する処理を共通化することができる。

今回は、複数のクラスのBeanを1つのリストにまとめて処理を行ってみたので、そのサンプルプログラムを共有する。

前提条件

下記記事のIntelliJ IDEA Community版をダウンロード済であること。

IntelliJ IDEAをインストールしてみた「IntelliJ IDEA(インテリジェイ アイディア)」という、Eclipseと同等の機能をもつJava用統合開発環境を使って、Sp...

また、下記のように、「demoJava」というJavaプロジェクトを作成済であること。
demoJavaプロジェクト

なお、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に対する処理を共通化することができる。その際、条件指定すれば、一部クラスに対する処理の実装も行える。