code: public static boolean reflectionIsEmpty(final Object obj, final IsEmptyConfig config, final Collection<String> excludedFields) {
  
          if(obj == null) {
              return true;
          }
  
          final IsEmptyBuilder builder = new IsEmptyBuilder(config);
          final Field[] fields = obj.getClass().getDeclaredFields();
          AccessibleObject.setAccessible(fields, true);
  
          for(Field field : fields) {
  
              // static フィールドかどうか
              if(Modifier.isStatic(field.getModifiers())) {
                  continue;
              }
  
              // transientのフィールドかどうか。
              if(!builder.testTransient && Modifier.isTransient(field.getModifiers())) {
                  continue;
              }
  
              // 除外対象のフィールド名かどうか。
              if(excludedFields != null && excludedFields.contains(field.getName())) {
                  continue;
              }
  
              try {
                  final Object value = field.get(obj);
                  builder.append(value);
  
              } catch (IllegalArgumentException | IllegalAccessException e) {
                  throw new InternalError("Unexpected IllegalAccessException");
              }
  
          }
  
          return builder.isEmpty();
      }
docs: リフレクションを使用しフィールドの値を取得し判定する。
  @since 1.0
  @param obj 判定対象のオブジェクト。
  @param config 判定用の設定クラス。
  @param excludedFields 除外対処のフィールド名。
  @return 引数で指定したobjがnullの場合、trueを返す。