Reflection enables Java code to discover information about the fields,
methods and constructors of loaded classes, and to use reflected
fields, methods, and constructors to operate on their underlying
counterparts on objects, within security restrictions. The reflection
API accommodates applications that need access to either the public
members of a target object (based on its runtime class) or the members
declared by a given class.
You should avoid the temptation to use reflection when other tools more
natural to the language would suffice. If you are accustomed to using
function pointers in another language, for example, you might think
that Method objects are a natural replacement for them. However,
usually an object-oriented tool-such as an interface that is
implemented by objects that perform the needed action-is better.
Reflection is intended for use by language tools such as debuggers and
class browsers.