Java - строго типизированный язык, со своими плюсами и минусами. Для всех минусов, это дает вам очень хорошую проверку во время компиляции. Ошибки / ошибки, обнаруженные во время компиляции, являются самыми дешевыми для поиска и исправления.
Отражение - это вещь времени выполнения. Вы не можете заставить компилятор проверять все, что вы делаете, используя отражение, поэтому, если вы используете отражение, вы потеряете много плюсов java. В частности, вы можете написать код, который компилируется, но взрывается во время выполнения. Термин, иногда используемый для кода отражающего типа, является «строковым типом» - вы используете имена методов (Strings), а не ссылки на реальные методы.
Разумеется, используется отражение, но всякий раз, когда вы его используете, помните, что вы подрываете силу Java. Использовать его широко, как в вашем случае, может быть вполне нормально, если ваши юнит-тесты охватывают достаточно случаев, чтобы дать вам уверенность в том, что вы используете его безопасно. Я бы санкционировал его использование, если бы код, который фактически использовал его, представлял собой довольно маленькую «полезную» базу кода.