code: public T build(Object... attributes) {
          List<Object> attributeList = new ArrayList<Object>(Arrays.asList(attributes)); //kinda wacky but Arrays.asList returns a unmodifiable list
  
          String[] traitNames = getTraitNames(attributeList);
          applyTraits(traitNames);
  
          T object = ReflectionUtils.createObject(factoryClass, constructorArgs);
  
          // merge default properties with supplied attributes
          Map<String, Object> propertyValues = createObjectPropertyValues(this.propertyValues, attributeList);
  
          // now set properties and fields to the created object
          setProperties(object, propertyValues);
          setFields(object, fieldValues);
  
          executeCallbacks(AfterFactoryBuild.class, object);
          return object;
      }
docs: Build object.
  @return