Good : dynamic, generic Bad: slow, don't work with Obfuscators and most searching and refactoring tools http://jroller.com/page/ie?entry=time_to_reconsider_reflection A very nice tool to get parameter name - https://github.com/paul-hammant/paranamer (e.g.: user of getUser(User user)) How to improve the performance - http://coding-masters.blogspot.com/2009/09/make-reflection-as-fast-as-direct-calls.html The problem of using reflection to modify final field - http://www.azulsystems.com/blog/cliff/2011-10-17-writing-to-final-fields-via-reflection Using reflection for using test - http://www.javaadvent.com/2012/12/of-hacking-enums-and-modifying-final.html Sharing about using invokedynamic - http://www.infoq.com/presentations/invokedynamic http://www.infoq.com/cn/articles/Invokedynamic-Javas-secret-weapon https://www.infoq.com/articles/Invokedynamic-Javas-secret-weapon LamdbaMetafactory is pretty fast. (*) - https://www.optaplanner.org/blog/2018/01/09/JavaReflectionButMuchFaster.html