code: public <T extends Model> T set(Object... namesAndValues) {
          if (namesAndValues.length % 2 != 0) {
              throw new IllegalArgumentException("number of arguments must be even");
          }
          for (int i = 0; i < namesAndValues.length; ) {
              if (namesAndValues[i] == null) {
                  throw new IllegalArgumentException("attribute names cannot be null");
              }
              set(namesAndValues[i++].toString(), namesAndValues[i++]);
          }
          return (T) this;
      }
docs: This is a convenience method to set multiple values to a model.
  Example:
  <pre>
  Person p = ...
  Person p = p.set("name", "Sam", "last_name", "Margulis", "dob", "2001-01-07");
  </pre>
  
  The first (index 0) and every other element in the array is an attribute name, while the second (index 1) and every
  other is a corresponding value.
  
  This allows for better readability of code. If you just read this aloud, it will become clear.
  
  @param namesAndValues names and values. elements at indexes 0, 2, 4, 8... are attribute names, and elements at
  indexes 1, 3, 5... are values. Element at index 1 is a value for attribute at index 0 and so on.
  @return newly instantiated model.