code: @SuppressWarnings("unchecked")
    public CliValueContainer getOrCreate(CliParameterContainer parameterContainer) {
  
      CliValueContainer result = this.map.get(parameterContainer);
      if (result == null) {
        PojoPropertyAccessorOneArg setter = parameterContainer.getSetter();
        Class<?> propertyClass = setter.getPropertyClass();
        if (propertyClass.isArray()) {
          result = new CliValueContainerArray(parameterContainer, this.cliState, this.dependencies, this.logger);
        } else if (Collection.class.isAssignableFrom(propertyClass)) {
          Class<? extends Collection<?>> collectionClass = (Class<? extends Collection<?>>) propertyClass;
          Collection<Object> collection = this.dependencies.getCollectionFactoryManager()
              .getCollectionFactory(collectionClass).create();
          result = new CliValueContainerCollection(parameterContainer, this.cliState, this.dependencies, this.logger,
              collection);
        } else if (Map.class.isAssignableFrom(propertyClass)) {
          Class<? extends Map<?, ?>> mapClass = (Class<? extends Map<?, ?>>) propertyClass;
          Map<Object, Object> mapValue = this.dependencies.getCollectionFactoryManager().getMapFactory(mapClass)
              .create();
          result = new CliValueContainerMap(parameterContainer, this.cliState, this.dependencies, this.logger,
              mapValue);
        } else {
          result = new CliValueContainerObject(parameterContainer, this.cliState, this.dependencies, this.logger);
        }
        this.map.put(parameterContainer, result);
      }
      return result;
    }
docs: This method gets the {@link CliValueContainer} for the given {@link CliParameterContainer}. In advance to
  {@link #get(CliParameterContainer)} this method will create an according {@link CliValueContainerObject} if not
  present and the {@link CliParameterContainer} has a {@link CliParameterContainer#getSetter() setter} with a
  {@link PojoPropertyAccessorOneArg#getPropertyType() property-type} reflecting an array, {@link Collection} or
  {@link Map}.
  
  @param parameterContainer is the {@link CliParameterContainer} that acts as key to the requested
  {@link CliValueContainerObject}.
  @return the requested {@link CliValueContainerObject} or {@code null} if NOT present and NOT created.