The reasoning is that in the case of primitives, there is no way to tell if a required primitive was actually set by the customer (ex: a required int will default to 0).
If we set it to int? then the customer has to set a value, and we can then check for the absence of null values in the runtime.