1. A method for generic type reification, the method comprising: determining, based on the usage of a first object at run time, a first actual type argument of a generic type of which the first object is an instance, wherein determining the first actual type argument comprises: initially establishing the first actual type argument to be an uncertain type that is constrained by a first upper bound type and a first lower bound type, updating the first upper bound type to a second upper bound type based on usage of the first object at runtime, and updating the first lower bound type to a second lower bound type based on the usage of the first object at runtime, wherein, after updating the first upper bound type and the first lower bound type, the first actual type argument is established as an uncertain type constrained by the second upper bound type and the second lower bound type; generating data that indicates the first actual type argument; and establishing an association between the first object and the data; wherein a declaration of the generic type is of a form that specifies (a) a name of the generic type and (b) following the name, a formal type parameter of the generic type that does not express any actual type argument, but whose presence indicates that the generic type is a type that can contain one or more items that are of types that will be determined by an actual type argument that is to be specified in place of the formal type parameter in a subsequent invocation of the generic type; wherein an invocation of the first object does not specify the first actual type argument.