src/main/java/com/beust/jcommander/ParameterDescription.java
public void addValue(String value, boolean isDefault) {
        p("Adding " + (isDefault ? "default " : "") + "value:" + value + " to parameter:" + m_field.getName());
        String name = m_wrappedParameter.names()[0];
        if (m_assigned && !isMultiOption()) {
            throw new ParameterException("Can only specify option " + name + " once.");
        }

        validateParameter(name, value);

        Class<?> type = m_field.getType();

        Object convertedValue = m_jCommander.convertValue(this, value);
        boolean isCollection = Collection.class.isAssignableFrom(type);

        try {
            if (isCollection) {
                @SuppressWarnings("unchecked") Collection<Object> l = (Collection<Object>) m_field.get(m_object);
                if (l == null || fieldIsSetForTheFirstTime(isDefault)) {
                    l = newCollection(type);
                    m_field.set(m_object, l);
                }
                if (convertedValue instanceof Collection) {
                    l.addAll((Collection) convertedValue);
                } else { // if (isMainParameter || m_parameterAnnotation.arity() > 1) {
                    l.add(convertedValue);
//        } else {
//          l.
                }
            } else {
                m_wrappedParameter.addValue(m_field, m_object, convertedValue);
            }
            if (!isDefault) m_assigned = true;
        } catch (IllegalAccessException ex) {
            ex.printStackTrace();
        }
    }
public void addValue(String value, boolean isDefault) {
        p("Adding " + (isDefault ? "default " : "") + "value:" + value + " to parameter:" + m_field.getName());
        String name = m_wrappedParameter.names()[0];
        if (m_assigned && !isMultiOption()) {
            throw new ParameterException("Can only specify option " + name + " once.");
        }

        validateParameter(name, value);

        Class<?> type = m_field.getType();

        Object convertedValue = m_jCommander.convertValue(this, value);
        boolean isCollection = Collection.class.isAssignableFrom(type);

        try {
            if (isCollection) {
                @SuppressWarnings("unchecked") Collection<Object> l = (Collection<Object>) m_field.get(m_object);
                if (l == null || fieldIsSetForTheFirstTime(isDefault)) {
                    l = newCollection(type);
                    m_field.set(m_object, l);
                }
                if (convertedValue instanceof Collection) {
                    l.addAll((Collection) convertedValue);
                } else { // if (isMainParameter || m_parameterAnnotation.arity() > 1) {
                    l.add(convertedValue);
//        } else {
//          l.
                }
            } else {
                m_wrappedParameter.addValue(m_field, m_object, convertedValue);
            }
            if (!isDefault) m_assigned = true;
        } catch (IllegalAccessException ex) {
            ex.printStackTrace();
        }
    }
Add the specified value to the field. First, validate the value if a
validator was specified. Then look up any field converter, then any type
converter, and if we can't find any, throw an exception.