code: public EqualsBuilder appendFields(String... fields) {
  		if (object == null) {
  			throw new IllegalStateException("You can't use this method if you didn't use the constructor with object and other parameters");
  		}
  		if (equals && !same) {
  			for (String field : fields) {
  				try {
  					delegate.append(getFieldValue(object, field), getFieldValue(other, field));
  				} catch (NoSuchFieldException | SecurityException | IllegalArgumentException | IllegalAccessException e) {
  					throw new FieldAccessException("Failed to access field " + field, e);
  				}
  			}
  		}
  		return this;
  	}
docs: <p>
  Test if the two previously registered objects have the same value for
  each provided field name.
  </p>
  
  <p>
  Because these fields are usually private, this method uses
  AccessibleObject.setAccessible to change the visibility of the fields.
  This will fail under a security manager, unless the appropriate
  permissions are set up correctly. It is also slower than testing
  explicitly. Non-primitive fields are compared using equals().
  </p>
  
  @param fields
  the name of fields to compare between the previously
  registered objects
  @return used to chain calls
  @throws IllegalStateException
  when calling this method but you haven't used the constructor
  {@link #EqualsBuilder(Object, Object)}
  @throws FieldAccessException
  when the field is not accessible or cannot be read