Allows creating parameter-initialized objects through static factory methods as well as constructors