code: public SerIterator create(Object value, MetaProperty<?> prop, Class<?> beanClass) {
          Class<?> declaredType = prop.propertyType();
          if (value instanceof Collection) {
              Class<?> valueType = defaultToObjectClass(JodaBeanUtils.collectionType(prop, beanClass));
              List<Class<?>> valueTypeTypes = JodaBeanUtils.collectionTypeTypes(prop, beanClass);
              return collection((Collection<?>) value, declaredType, valueType, valueTypeTypes);
          }
          if (value instanceof Map) {
              Class<?> keyType = defaultToObjectClass(JodaBeanUtils.mapKeyType(prop, beanClass));
              Class<?> valueType = defaultToObjectClass(JodaBeanUtils.mapValueType(prop, beanClass));
              List<Class<?>> valueTypeTypes = JodaBeanUtils.mapValueTypeTypes(prop, beanClass);
              return map((Map<?, ?>) value, declaredType, keyType, valueType, valueTypeTypes);
          }
          if (value.getClass().isArray() && value.getClass().getComponentType().isPrimitive() == false) {
              Object[] array = (Object[]) value;
              return array(array, declaredType, array.getClass().getComponentType());
          }
          return null;
      }
docs: Creates an iterator wrapper for a meta-property value.
  
  @param value  the possible collection-like object, not null
  @param prop  the meta-property defining the value, not null
  @param beanClass  the class of the bean, not the meta-property, for better generics, not null
  @return the iterator, null if not a collection-like type