public boolean set(List<String> l, boolean append) {
    try {
      Object v = interpretValue(getGenericType(), l, fullName());
      if(v == errorValue) return false;
      //System.out.println(name + " " + stringRepn + " " + v);
      if(!append) {
        // Treat boolean case specially because -flag means true, and l is empty
        if(isBool(getGenericType()))
          stringRepn = v.toString();
        else
          stringRepn = StrUtils.join(l);
//        field.set(obj, v);
        setField(v);
      }
      else {
        Object oldv = field.get(obj);
        //System.out.println("append " + l);
        //System.out.println((oldv == null ? "" : (String)oldv + " ") + v);
        stringRepn = (stringRepn == null ? "" : stringRepn + " ") +
          StrUtils.join(l);
        if(oldv instanceof ArrayList)
          ((ArrayList)oldv).addAll((ArrayList)v);
        else if(oldv instanceof String)
//        field.set(obj, (oldv == null ? "" : (String)oldv + " ") + v);
          setField((oldv == null ? "" : (String)oldv + " ") + v);
      }
    } catch(InvocationTargetException e) {
      stderr.println("Can't set method: " + e);
      return false;
    } catch(IllegalAccessException e) {
      stderr.println("Can't set field: " + e);
      return false;
    }

    specified = true;
    return true;
  }