Class BeanUtil

java.lang.Object
nablarch.core.beans.BeanUtil

@Published public final class BeanUtil extends Object
JavaBeansに関する操作をまとめたユーティリティクラス。
Author:
kawasima, tajima
  • Method Details

    • getPropertyDescriptors

      public static PropertyDescriptor[] getPropertyDescriptors(Class<?> beanClass)
      指定したクラスに属する全てのプロパティの PropertyDescriptor を取得する。 ただし、classプロパティは取得対象外となる。
      Parameters:
      beanClass - プロパティを取得したいクラス
      Returns:
      PropertyDescriptor[] 全てのプロパティの PropertyDescriptor
      Throws:
      BeansException - プロパティの取得に失敗した場合。
    • getPropertyDescriptor

      public static PropertyDescriptor getPropertyDescriptor(Class<?> beanClass, String propertyName)
      指定したクラスから、特定のプロパティのPropertyDescriptor を取得する。
      Parameters:
      beanClass - プロパティを取得したいクラス
      propertyName - 取得したいプロパティ名
      Returns:
      PropertyDescriptor 取得したプロパティ
      Throws:
      BeansException - propertyName に対応するプロパティが定義されていない場合。
    • getProperty

      public static Object getProperty(Object bean, String propertyName)
      指定したオブジェクトから、特定のプロパティの値を取得する。

      propertyNameには、beanのトップレベル要素のみ指定可能である。

           
           // ----------サンプルで使用するBean----------
           public class SampleBean {
               private String stringProp;
               private List<String> listProp;
               private String[] arrayProp;
               private NestedBean nestedBean;
               // setter及びgetterは省略
           }
      
           public class NestedBean {
               private String nestedStringProp;
               // setter及びgetterは省略
           }
      
           // ----------実装例----------
           // 問題のないコード1
           String stringProp = BeanUtil.getProperty(sampleBean, "stringProp");
      
           // 問題のないコード2
           String stringProp = BeanUtil.getProperty(sampleBean.nestedBean, "nestedStringProp");
      
           // 以下のコードは動作しない
           String nestedStringProp = BeanUtil.getProperty(sampleBean, "nestedBean.nestedStringProp");
      
           
       
      Parameters:
      bean - プロパティの値を取得したいBeanオブジェクト
      propertyName - 取得したいプロパティ名
      Returns:
      Object オブジェクトから取得したプロパティの値
      Throws:
      BeansException - propertyName に対応するプロパティが定義されていない場合。
    • getProperty

      public static Object getProperty(Object bean, String propertyName, Class<?> type)
      指定したオブジェクトのプロパティの値を、指定した型に変換して取得する。

      型変換の仕様はConversionUtilを参照。

      propertyNameの指定方法についてはgetProperty(Object, String)を参照。

      Parameters:
      bean - プロパティの値を取得したいBeanオブジェクト
      propertyName - 取得したいプロパティの名称
      type - 変換したい型 (nullを指定した場合は変換を行わず、プロパティの値をそのまま返す。)
      Returns:
      Object 取得したプロパティをtypeに変換したオブジェクト
      Throws:
      BeansException - propertyName に対応するプロパティが定義されていない場合。
    • setProperty

      public static void setProperty(Object bean, String propertyName, Object propertyValue)
      指定したオブジェクトのプロパティに値を登録する。

      対象のプロパティにsetterが定義されていない場合はなにもしない。

      propertyValueがnullの場合は、例外の送出やログ出力は行わずに、対象プロパティの値はnullになる。

      プロパティの指定方法
      propertyNameにはプロパティ名を指定する。 List型・配列型のプロパティでは、"プロパティ名[インデックス]"という形式で要素番号を指定して値を登録できる。 ネストしたプロパティを指定することも可能である。ネストの深さに制限はない。 ネストの親となるプロパティがnullである場合は、デフォルトコンストラクタを起動し インスタンスを生成してから値を格納する。 実装例

       
           // ----------サンプルで使用するBean----------
           public class SampleBean {
               private String stringProp;
               private List<String> listProp;
               private String[] arrayProp;
               private NestedBean nestedBean;
               // setter及びgetterは省略
           }
           public class NestedBean {
               private String nestedStringProp;
      
               // setter及びgetterは省略
           }
      
           // ----------実装例----------
           SampleBean sampleBean = new SampleBean();
      
           // stringPropプロパティに"value"を登録
           BeanUtil.setProperty(sampleBean,"stringProp", "value");
      
           // stringPropプロパティにnullを登録。stringPropはnullとなる
           BeanUtil.setProperty(sampleBean,"stringProp", null);
      
           // listPropPropプロパティの要素番号0の位置に"list_value"を登録
           BeanUtil.setProperty(sampleBean,"listProp[0]", "list_value");
      
           // 配列型のプロパティの要素番号0の位置に"array_value"を登録
           // 十分な要素数が自動で確保される
           BeanUtil.setProperty(sampleBean, "arrayProp[0]", "array_value");
      
           // nestedBeanプロパティのnestedStringPropプロパティに"nested_value"を登録
           BeanUtil.setProperty(sampleBean, "nestedBean.nestedStringProp", "nested_value");
       
       

      Parameters:
      bean - 値を登録したいBeanオブジェクト
      propertyName - 値を登録したいプロパティ名
      propertyValue - 登録したい値
      Throws:
      BeansException -
      • propertyNameに対応するプロパティが定義されていない場合
      • List型・配列型以外のプロパティに、"プロパティ名[インデックス]"という形式で指定した場合
      • ネストの親となるプロパティのインスタンス生成に失敗した場合
    • createAndCopy

      public static <T> T createAndCopy(Class<T> beanClass, Map<String,?> map, CopyOptions copyOptions)
      MapからBeanを生成する。

      mapがnullである場合は、デフォルトコンストラクタでbeanClassを生成して返却する。

      mapにvalueがnullのエントリがある場合、対応するプロパティの値はnullとなる。

      対象のプロパティにsetterが定義されていない場合はなにもしない。

      プロパティの指定方法
      mapに格納するエントリのキー値には、値を登録したいプロパティ名を指定する。 List型・配列型のプロパティでは、"プロパティ名[インデックス]"という形式で要素番号を指定して値を登録できる。 ネストしたプロパティを指定することも可能である。ネストの深さに制限はない。 ネストの親となるプロパティがnullである場合は、インスタンスを生成してから値を登録する。 実装例

       
           // ----------サンプルで使用するBean----------
           public class SampleBean {
               private String stringProp;
               private List<String> listProp;
               private String[] arrayProp;
               private NestedBean nestedBean;
      
               // setter及びgetterは省略
           }
      
           public class NestedBean {
               private String nestedStringProp;
      
               // setter及びgetterは省略
           }
      
           // ----------実装例----------
           // 格納したいプロパティ名をkeyに、値をvalueにもつMapを作成する
           Map<String,Object> map = new HashMap();
      
           // String型のプロパティに"value"を登録
           map.put("stringProp", "value");
      
           // stringPropプロパティにnullを登録。stringPropはnullとなる。
           map.put("stringProp", null);
      
           // List型のプロパティの要素番号0の位置に"list_value"を登録
           map.put("listProp[0]", "list_value");
      
           // 配列型のプロパティの要素番号0の位置に"array_value"を登録
           // 十分な要素数が自動で確保される
           map.put("arrayProp[0]", "array_value");
      
           // ネストしたオブジェクトのプロパティに"nested_value"を登録
           map.put("nestedBean.nestedStringProp", "nested_value");
      
           SampleBean sampleBean = BeanUtil.createAndCopy(SampleBean.class,map);
       
       

      Type Parameters:
      T - 型引数
      Parameters:
      beanClass - 生成したいBeanクラス
      map - JavaBeansのプロパティ名をエントリーのキー プロパティの値をエントリーの値とするMap
      copyOptions - コピーの設定
      Returns:
      プロパティに値が登録されたBeanオブジェクト
      Throws:
      BeansException - beanClassにデフォルトコンストラクタが定義されていない場合や、 beanClassのコンストラクタ実行時に問題が発生した場合。
    • copy

      public static <T> void copy(Class<? extends T> beanClass, T bean, Map<String,?> map, CopyOptions copyOptions)
      MapからBeanインスタンスへコピーを行う。 生成済みのインスタンスにコピーを行う点以外は、createAndCopy(Class, Map, CopyOptions)と同じ動作である。
      Type Parameters:
      T - 型引数
      Parameters:
      beanClass - 移送先BeanのClass
      bean - 移送先Beanインスタンス
      map - 移送元のMap JavaBeansのプロパティ名をエントリーのキー プロパティの値をエントリーの値とするMap
      copyOptions - コピーの設定
    • createAndCopy

      public static <T> T createAndCopy(Class<T> beanClass, Map<String,?> map)
      MapからBeanを生成する。

      内部的には空のCopyOptionsを渡してcreateAndCopy(Class, Map, CopyOptions)を呼び出している。

      Type Parameters:
      T - 型引数
      Parameters:
      beanClass - 生成したいBeanクラス
      map - JavaBeansのプロパティ名をエントリーのキー プロパティの値をエントリーの値とするMap
      Returns:
      プロパティに値が登録されたBeanオブジェクト
      Throws:
      BeansException - beanClassにデフォルトコンストラクタが定義されていない場合や、 beanClassのコンストラクタ実行時に問題が発生した場合。
    • createAndCopyIncludes

      public static <T> T createAndCopyIncludes(Class<T> beanClass, Map<String,?> map, String... includes)
      Mapから、指定したプロパティのみをコピーしたBeanを生成する。

      mapがnullである場合は、デフォルトコンストラクタでbeanClassを生成して返却する。

      mapでvalueがnullであるプロパティの値はnullになる。例外の送出やログ出力は行わない。

      対象のプロパティにsetterが定義されていない場合はなにもしない。

      プロパティの指定方法についてはcreateAndCopy(Class, Map)を参照。

      Type Parameters:
      T - 型引数
      Parameters:
      beanClass - 生成したいBeanクラス
      map - JavaBeansのプロパティ名をエントリーのキー プロパティの値をエントリーの値とするMap
      includes - コピー対象のプロパティ名
      Returns:
      Beanオブジェクト
      Throws:
      BeansException - beanClassにデフォルトコンストラクタが定義されていない場合や、 beanClassのコンストラクタ実行時に問題が発生した場合。
    • createAndCopyExcludes

      public static <T> T createAndCopyExcludes(Class<T> beanClass, Map<String,?> map, String... excludes)
      Mapから指定されたプロパティ以外をコピーしてBeanを生成する。

      mapがnullである場合は、デフォルトコンストラクタでbeanClassを生成して返却する。

      mapでvalueがnullであるプロパティの値はnullになる。例外の送出やログ出力は行わない。

      対象のプロパティにsetterが定義されていない場合はなにもしない。

      プロパティの指定方法についてはcreateAndCopy(Class, Map)を参照。

      Type Parameters:
      T - 型引数
      Parameters:
      beanClass - 生成したいBeanクラス
      map - JavaBeansのプロパティ名をエントリーのキー プロパティの値をエントリーの値とするMap
      excludes - コピー対象外のプロパティ名
      Returns:
      プロパティに値が登録されたBeanオブジェクト
      Throws:
      BeansException - beanClassにデフォルトコンストラクタが定義されていない場合や、 beanClassのコンストラクタ実行時に問題が発生した場合。
    • createAndCopy

      public static <T> T createAndCopy(Class<T> beanClass, Object srcBean)
      Java Beansからプロパティをコピーして、別のBeanを作成する。

      srcBeanがnullである場合、デフォルトコンストラクタでbeanClassを生成して返却する。

      Type Parameters:
      T - 型引数
      Parameters:
      beanClass - コピー先のBeanクラス
      srcBean - コピー元のBean
      Returns:
      コピーされたBeanオブジェクト
      Throws:
      BeansException - beanClassにデフォルトコンストラクタが定義されていない場合や、 beanClassのコンストラクタの実行中に問題が発生した場合。
    • createAndCopy

      public static <T> T createAndCopy(Class<T> beanClass, Object srcBean, CopyOptions copyOptions)
      Java Beansからプロパティをコピーして、別のBeanを作成する。

      srcBeanがnullである場合、デフォルトコンストラクタでbeanClassを生成して返却する。

      Type Parameters:
      T - 型引数
      Parameters:
      beanClass - コピー先のBeanクラス
      srcBean - コピー元のBean
      copyOptions - コピーの設定
      Returns:
      コピーされたBeanオブジェクト
      Throws:
      BeansException - beanClassにデフォルトコンストラクタが定義されていない場合や、 beanClassのコンストラクタの実行中に問題が発生した場合。
    • createAndCopyIncludes

      public static <T> T createAndCopyIncludes(Class<T> beanClass, Object srcBean, String... includes)
      Java Beansから指定されたプロパティをコピーして、別のBeanを作成する。

      srcBeanがnullである場合、デフォルトコンストラクタでbeanClassを生成して返却する。

      Type Parameters:
      T - 型引数
      Parameters:
      beanClass - コピー先のBeanクラス
      srcBean - コピー元のBean
      includes - コピー対象のプロパティ名
      Returns:
      コピーされたBeanオブジェクト
      Throws:
      BeansException - beanClassにデフォルトコンストラクタが定義されていない場合や、 beanClassのデフォルトコンストラクタの実行中に問題が発生した場合。
    • createAndCopyExcludes

      public static <T> T createAndCopyExcludes(Class<T> beanClass, Object srcBean, String... excludes)
      Java Beansから指定されたプロパティ以外をコピーして、別のBeanを作成する。

      srcBeanがnullである場合、デフォルトコンストラクタでbeanClassを生成して返却する。

      プロパティのコピーはsrcBeanに定義されたプロパティをベースに実行される。 srcBeanに存在し、beanClassに存在しないプロパティはコピーされない。

      Type Parameters:
      T - 型引数
      Parameters:
      beanClass - コピー先のBeanクラス
      srcBean - コピー元のBean
      excludes - コピー対象外のプロパティ名
      Returns:
      プロパティに値がコピーされたBeanオブジェクト
      Throws:
      BeansException - beanClassのデフォルトコンストラクタの実行中に問題が発生した場合や、 beanClassのプロパティのデフォルトコンストラクタの実行中に問題が発生した場合。
    • copyInner

      protected static <SRC, DEST> DEST copyInner(SRC srcBean, DEST destBean, CopyOptions copyOptions)
      BeanからBeanに値をコピーする。

      内部で共通的に使用されるメソッド。

      Type Parameters:
      SRC - コピー元のBeanの型
      DEST - コピー先のBeanの型
      Parameters:
      srcBean - コピー元のBeanオブジェクト
      destBean - コピー先のBeanオブジェクト
      copyOptions - コピーの設定
      Returns:
      コピー先のBeanオブジェクト
    • copy

      public static <SRC, DEST> DEST copy(SRC srcBean, DEST destBean)
      BeanからBeanに値をコピーする。

      プロパティのコピーはsrcBeanに定義されたプロパティをベースに実行される。 srcBeanに存在し、destBeanに存在しないプロパティはコピーされない。

      Type Parameters:
      SRC - コピー元のBeanの型
      DEST - コピー先のBeanの型
      Parameters:
      srcBean - コピー元のBeanオブジェクト
      destBean - コピー先のBeanオブジェクト
      Returns:
      コピー先のBeanオブジェクト
      Throws:
      BeansException - destBeanのプロパティのインスタンス生成に失敗した場合
    • copy

      public static <SRC, DEST> DEST copy(SRC srcBean, DEST destBean, CopyOptions copyOptions)
      BeanからBeanに値をコピーする。

      プロパティのコピーはsrcBeanに定義されたプロパティをベースに実行される。 srcBeanに存在し、destBeanに存在しないプロパティはコピーされない。

      Type Parameters:
      SRC - コピー元のBeanの型
      DEST - コピー先のBeanの型
      Parameters:
      srcBean - コピー元のBeanオブジェクト
      destBean - コピー先のBeanオブジェクト
      copyOptions - コピーの設定
      Returns:
      コピー先のBeanオブジェクト
      Throws:
      BeansException - destBeanのプロパティのインスタンス生成に失敗した場合
    • copyExcludesNull

      public static <SRC, DEST> DEST copyExcludesNull(SRC srcBean, DEST destBean)
      BeanからBeanに値をコピーする。ただしnullのプロパティはコピーしない。

      プロパティのコピーはsrcBeanに定義されたプロパティをベースに実行される。 srcBeanに存在し、destBeanに存在しないプロパティはコピーされない。

      Type Parameters:
      SRC - コピー元Beanの型
      DEST - コピー先のBeanの型
      Parameters:
      srcBean - コピー元のBeanオブジェクト
      destBean - コピー先のBeanオブジェクト
      Returns:
      コピー先のBeanオブジェクト
      Throws:
      BeansException - destBeanのプロパティのインスタンス生成に失敗した場合
    • copyIncludes

      public static <SRC, DEST> DEST copyIncludes(SRC srcBean, DEST destBean, String... includes)
      BeanからBeanに、指定されたプロパティをコピーする。

      プロパティのコピーはsrcBeanに定義されたプロパティをベースに実行される。 srcBeanに存在し、destBeanに存在しないプロパティはコピーされない。

      includesには、srcBeanのトップレベル要素のみ指定可能である。 それ以外を指定した場合はコピーされない。

           
           // aaa.bbbはコピーされない
           SampleBean copiedSampleBean = BeanUtil.createAndCopyIncludes(SampleBean.class, sampleBean, "aaa.bbb");
           
       
      Type Parameters:
      SRC - コピー元Beanの型
      DEST - コピー先のBeanの型
      Parameters:
      srcBean - コピー元のBeanオブジェクト
      destBean - コピー先のBeanオブジェクト
      includes - コピー対象のプロパティ名
      Returns:
      コピー先のBeanオブジェクト
      Throws:
      BeansException - destBeanのプロパティのインスタンス生成に失敗した場合
    • copyExcludes

      public static <SRC, DEST> DEST copyExcludes(SRC srcBean, DEST destBean, String... excludes)
      BeanからBeanに、指定されたプロパティ以外をコピーする。

      プロパティのコピーはsrcBeanに定義されたプロパティをベースに実行される。 srcBeanに存在し、destBeanに存在しないプロパティはコピーされない。

      Type Parameters:
      SRC - コピー元Beanの型
      DEST - コピー先のBeanの型
      Parameters:
      srcBean - コピー元のBeanオブジェクト
      destBean - コピー先のBeanオブジェクト
      excludes - コピー対象外のプロパティ名
      Returns:
      コピー先のBeanオブジェクト
      Throws:
      BeansException - destBeanのプロパティのインスタンス生成に失敗した場合
    • createMapAndCopy

      public static <SRC> Map<String,Object> createMapAndCopy(SRC srcBean, CopyOptions copyOptions)
      BeanからMapにプロパティの値をコピーする。

      Mapのキーはプロパティ名で、値はプロパティ値となる。 値の型変換は行わず、Beanのプロパティの値を単純にMapの値に設定する。 BeanがBeanを持つ構造の場合、Mapのキー値は「.」で連結された値となる。

      Type Parameters:
      SRC - Beanの型
      Parameters:
      srcBean - Bean
      copyOptions - コピーの設定
      Returns:
      BeanのプロパティをコピーしたMap
    • createMapAndCopy

      public static <SRC> Map<String,Object> createMapAndCopy(SRC srcBean)
      BeanからMapにプロパティの値をコピーする。

      内部的には空のCopyOptionsを渡してcreateMapAndCopy(Object, CopyOptions)を呼び出している。

      Type Parameters:
      SRC - Beanの型
      Parameters:
      srcBean - Bean
      Returns:
      BeanのプロパティをコピーしたMap
    • createMapAndCopyExcludes

      public static <SRC> Map<String,Object> createMapAndCopyExcludes(SRC srcBean, String... excludeProperties)
      BeanからMapにプロパティの値をコピーする。

      Mapのキーはプロパティ名で、値はプロパティ値となる。 値の型変換は行わず、Beanのプロパティの値を単純にMapの値に設定する。 BeanがBeanを持つ構造の場合、Mapのキー値は「.」で連結された値となる。

      除外対象のプロパティ名が指定された場合は、そのプロパティがコピー対象から除外される。

      Type Parameters:
      SRC - Beanの型
      Parameters:
      srcBean - Bean
      excludeProperties - 除外対象のプロパティ名
      Returns:
      BeanのプロパティをコピーしたMap
    • createMapAndCopyIncludes

      public static <SRC> Map<String,Object> createMapAndCopyIncludes(SRC srcBean, String... includesProperties)
      BeanからMapに指定されたプロパティの値をコピーする。

      Mapのキーはプロパティ名で、値はプロパティ値となる。 値の型変換は行わず、Beanのプロパティの値を単純にMapの値に設定する。 BeanがBeanを持つ構造の場合、Mapのキー値は「.」で連結された値となる。

      コピー対象のプロパティ名として指定できるのは、トップ階層のBeanのプロパティ名となる。 このため、階層構造で子階層のBeanがinclude指定されていた場合、子階層のBeanのプロパティは全てコピーされる。

      Type Parameters:
      SRC - Beanの型
      Parameters:
      srcBean - Bean
      includesProperties - コピー対象のプロパティ名のリスト
      Returns:
      BeanのプロパティをコピーしたMap