To answer the question in the title: no, not a priori. For example, reflection can be extremely convenient when introducing plants to create objects of different (but related) types.
However, these are all implementation details, and they usually should be hidden behind a common interface. Reflection also tends to be rather slow, so excessive use is not recommended. Basically, use it when there is no other (good) solution, and nowhere else.
. / , , .