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 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.
The JavaTM 2 Platform allows programs to suppress default reflective
access control.