Converts a type to its corresponding boxed type if it is primitive. Else returns the type itself.
Creates a parameterized type using the given class and type arguments.
Creates a parameterized type using template type arguments.
Converts a type to its corresponding unboxed type (if exists) if it is boxed. Else returns the type itself.