I see your point, but given the number of times I made silly mistakes that took some time to find, I'd move any responsibilities I can to the compiler, it also helps me maintain and reason about the project, It's like trusting the compiler vs trusting the humans.
I agree about reflection, which's why I never touch it directly, or at least I didn't have to, yet.
As an example, I tend to stay away from Python as much as I can, because I don't trust myself around it and there's no compiler to tell me when I do something stupid.